Article View: be.comp.programming
Article #6828Java threads - niet deterministisch ?
From: 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
Technical Details
Message-ID:
<3dd95f2e$0$212$fa0fcedb@lovejoy.zen.co.uk>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-03!sn-xit-06!sn-xit-08!supernews.com!newspump.sol.net!newshosting.com!news-xfer1.atl.newshosting.com!newsfeed.icl.net!newsfeed.fjserv.net!kibo.news.demon.net!demon!peer1.news.newnet.co.uk!zen.net.uk!lovejoy.zen.co.uk.POSTED!not-for-mailShow Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit X-Google-Thread: fcea4,2403945234a191,start X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2002-11-18 13:56:08 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-03!sn-xit-06!sn-xit-08!supernews.com!newspump.sol.net!newshosting.com!news-xfer1.atl.newshosting.com!newsfeed.icl.net!newsfeed.fjserv.net!kibo.news.demon.net!demon!peer1.news.newnet.co.uk!zen.net.uk!lovejoy.zen.co.uk.POSTED!not-for-mail From: "wez" <wez@wez.com> Newsgroups: be.comp.programming Subject: Java threads - niet deterministisch ? Date: Mon, 18 Nov 2002 21:43:24 -0000 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2800.1106 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106 Lines: 176 Message-ID: <3dd95f2e$0$212$fa0fcedb@lovejoy.zen.co.uk> Organization: Zen Internet NNTP-Posting-Host: 217.155.37.201 X-Trace: 1037655854 lovejoy.zen.co.uk 212 217.155.37.201 X-Complaints-To: abuse@zen.co.uk