🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #6828

Java threads - niet deterministisch ?

#6828
From: 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
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-mail

Show 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