Thread View: be.comp.programming
3 messages
3 total messages
Started by wez
Mon, 18 Nov 2002 21:43
Java threads - niet deterministisch ?
Author: wez
Date: Mon, 18 Nov 2002 21:43
Date: Mon, 18 Nov 2002 21:43
174 lines
4790 bytes
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 ?
Author: Koen Hautekeete
Date: Mon, 18 Nov 2002 22:19
Date: Mon, 18 Nov 2002 22:19
57 lines
2386 bytes
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 ?
Author: wez
Date: Mon, 18 Nov 2002 22:30
Date: Mon, 18 Nov 2002 22:30
26 lines
2100 bytes
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