🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: be.comp.programming
3 messages
3 total messages Started by wez Mon, 18 Nov 2002 21:43
Java threads - niet deterministisch ?
#6828
Author: wez
Date: Mon, 18 Nov 2002 21:43
174 lines
4790 bytes
Ik heb een "klein" probleempje. Ik programeer in Java en het is de bedoeling
om 2 verschillende
threads te laten werken - met "synchronize" , "wait" and "notify". Ik heb 4
klassen gedevelopeerd
die ik hieronder heb ge-paste. De bedoeling is om de datum in een
"Repository" object te bewaren
met een method "put", en dan met een method "get" die datum nemen en op het
scherm printen met middel
van System.out.println. Alles werkt, maar Java lijkt "non-deterministic" te
zijn.. m.a.w. ik zou zoiets moeten
krijgen :

DateWriter put : Sat Aug 10 21:48:27 BST 2002
DateReader got : Sat Aug 10 21:48:27 BST 2002
DateWriter put : Sat Aug 10 21:48:28 BST 2002
DateReader got : Sat Aug 10 21:48:28 BST 2002
DateWriter put : Sat Aug 10 21:48:29 BST 2002
DateReader got : Sat Aug 10 21:48:29 BST 2002
DateWriter put : Sat Aug 10 21:48:30 BST 2002
DateReader got : Sat Aug 10 21:48:30 BST 2002
DateWriter put : Sat Aug 10 21:48:31 BST 2002
DateReader got : Sat Aug 10 21:48:31 BST 2002

ik krijg iets in de aarde van :

DateWriter put : Sat Aug 10 21:48:27 BST 2002
DateWriter got : Sat Aug 10 21:48:27 BST 2002
DateWriter got : Sat Aug 10 21:48:28 BST 2002
DateWriter put : Sat Aug 10 21:48:28 BST 2002
DateWriter put : Sat Aug 10 21:48:29 BST 2002
DateWriter got : Sat Aug 10 21:48:29 BST 2002

etc...

hier zijn de source codes voor mijn 4 klassen :

elke keer ik de programma start geeft het een verschillende output.
what's wrong?!

graag advies.

mvg,
wez

************

package A;
import java.util.*;

public class DateReader extends Thread {

  Repository dateTimeRep;

  public DateReader (Repository rep) {
    dateTimeRep = rep;
  }

  public void run() {

    try {
      for (int j=0; j<5; j++) {

        System.out.println("DateReader got: " + dateTimeRep.get());
        Thread.sleep(1000);
      }
    }

    catch (InterruptedException ie) {
      System.out.println (ie.toString());
    }

  }

}

*************
package A;
import java.util.*;

public class DateWriter extends Thread{

  Repository dateTimeRep;

  public DateWriter (Repository rep) {
    dateTimeRep = rep;
  }

  public void run() {

    try {
      for (int i=0; i<5; i++) {

        Date dateTime = new Date ();
        String dateString = dateTime.toString();
        dateTimeRep.put(dateString);
        System.out.println("DateWriter put: " + dateString);
        Thread.sleep(1000);


        /*
        Date current_date = new Date();
        dateTimeRep.put(current_date.toString());
        System.out.println("DateWriter put : " + current_date.toString());
        Thread.sleep(1000);
        */
      }
    }

    catch (InterruptedException ie) {
      System.out.println (ie.toString());
    }

  }

}


******************

package A;
public class Main {

  public static void main (String args[]) {

  Repository repInstance = new Repository();
  DateWriter dateWriterThread = new DateWriter(repInstance);
  DateReader dateReaderThread = new DateReader(repInstance);
  dateWriterThread.start();
  dateReaderThread.start();


  }

}


*****************

package A;
public class Repository {

  String dateString;
  boolean check=false;



  public synchronized String get () {
    try {
      if (!check) {
        wait();
      }//end if
    }//end try
    catch (InterruptedException E) {
    }//end catch
    notify();
    check = false;
    return dateString;
  }//end get

  public synchronized void put (String input) {
    try  {
      if (check) {
        wait();
      }//end if
    }//end try
    catch (InterruptedException e) {
    }//end catch
    notify();
    dateString = input;
    check = true;
  }//end put


}//end class
Re: Java threads - niet deterministisch ?
#6829
Author: Koen Hautekeete
Date: Mon, 18 Nov 2002 22:19
57 lines
2386 bytes
On Mon, 18 Nov 2002 21:43:24 -0000, "wez" <wez@wez.com> wrote:

>Ik heb een "klein" probleempje. Ik programeer in Java en het is de bedoeling
>om 2 verschillende
>threads te laten werken - met "synchronize" , "wait" and "notify". Ik heb 4
>klassen gedevelopeerd
>die ik hieronder heb ge-paste. De bedoeling is om de datum in een
>"Repository" object te bewaren
>met een method "put", en dan met een method "get" die datum nemen en op het
>scherm printen met middel
>van System.out.println. Alles werkt, maar Java lijkt "non-deterministic" te
>zijn.. m.a.w. ik zou zoiets moeten
>krijgen :
>

[ ... ]

>  public synchronized String get () {
>    try {
>      if (!check) {
>        wait();
>      }//end if
>    }//end try
>    catch (InterruptedException E) {
>    }//end catch

Op het eerste zicht zou ik 'notify' na 'check = false' zetten...

>    notify();
>    check = false;

>    return dateString;
>  }//end get
>
>  public synchronized void put (String input) {
>    try  {
>      if (check) {
>        wait();
>      }//end if
>    }//end try
>    catch (InterruptedException e) {
>    }//end catch

Hier hetzelfde, notify als laatste...

>    notify();
>    dateString = input;
>    check = true;
>  }//end put
>
>
>}//end class
>

mvg

Koen Hautekeete
Re: Java threads - niet deterministisch ?
#6834
Author: wez
Date: Mon, 18 Nov 2002 22:30
26 lines
2100 bytes
Koen, bedankt voor de tip maar het werkt nog altijd niet..
ik heb die notify van plaatst verandert dan mijn programma 3 keer
gerund, die 3 keer werkte het perfect maar de vierde keer :

AppAccelerator(tm) 1.2.010 for Java (JDK 1.2), x86 version.
Copyright (c) 1997-1999 Inprise Corporation. All Rights Reserved.

Press Ctrl+C to terminate the application...
DateWriter put: Mon Nov 18 22:25:33 GMT 2002
DateReader got: Mon Nov 18 22:25:33 GMT 2002
DateWriter put: Mon Nov 18 22:25:34 GMT 2002
DateReader got: Mon Nov 18 22:25:34 GMT 2002
DateWriter put: Mon Nov 18 22:25:35 GMT 2002
DateReader got: Mon Nov 18 22:25:35 GMT 2002      <--
DateReader got: Mon Nov 18 22:25:36 GMT 2002      <--
DateWriter put: Mon Nov 18 22:25:36 GMT 2002
DateWriter put: Mon Nov 18 22:25:37 GMT 2002
DateReader got: Mon Nov 18 22:25:37 GMT 2002


Wat moet ik doen? daarna probeerde ik nog enkele keren en leek het wel te
werken
dan weer niet.. het lijkt her wel op dat het altijd op dezelfde lijn mis
gaat. Enig idee ?

vriendelijk bedankt!
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads