πŸš€ go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #3215

[java]multithreading vraagje/probleem

#3215
From: Passero
Date: Sun, 25 Jan 2004 15:40
85 lines
3155 bytes
Morgen heb ik examen java en ben enkele oefeningen aan het maken. 1 van die
oefeningen lukt niet echt. AllοΏ½ ze werkt, ik krijg geen fouten maar ben niet
zeker of het fout is. Het gaat om volgende oefening:
We moeten een restaurant simuleren met 1 kok en 2 kelners. Een kelner moet
om een bestelling komen bij de kok en dan moet de kelner tussen 0 en 2 sec
slapen. Ik heb dat gedaan en telkens als ik het programma uitvoer krijg ik
altijd als uitvoer eerst kelner1 dan kelner2 dan weer 1 dan weer 2 en zo tot
op het einde. Aangezien ik met multithreading zit en een random getal
genereer tussen 0 en 2 sec moet het toch voorkomen dat 1 kelner 2 opdrachten
na elkaar doet? Waar zit dan mijn fout in mijn code?

Dit is de code:

public class kok extends Thread
{
 private Kelner piet = new Kelner("Piet",this);
 private Kelner jan = new Kelner("Jan",this);
 private boolean isVrij = true;

 public void run()
 {
  piet.start();
  jan.start();
  while(true)
  {
   try
   {
    sleep((long)Math.random()*2000);
    if(jan.getIsVrij())
    {
     jan.krijgOpdracht(new Order());
    }
    sleep((long)Math.random()*2000);
    {
    if(piet.getIsVrij())
     piet.krijgOpdracht(new Order());
    }
   }
   catch(InterruptedException ie){}
  }

 }

 public synchronized boolean getIsVrij()
 {
  return isVrij;
 }
}


public class Kelner extends Thread
{
 private String naam;
 private kok deKok;
 private boolean isVrij = true;

 public Kelner(String eenNaam,kok eenKok)
 {
  naam = eenNaam;
  deKok = eenKok;
 }



 public synchronized boolean getIsVrij()
 {
  return isVrij;
 }

 public synchronized void setIsVrij(boolean vrij)
 {
  isVrij = vrij;
 }

 public void krijgOpdracht(Order eenOrder)
 {
  try{
   System.out.println(naam  + " ontvangt: " + eenOrder.toString());
   setIsVrij(false);
   sleep((long)Math.random()*2000);
   setIsVrij(true);
  }
  catch(InterruptedException ie){}
 }
}
Technical Details
Message-ID: <WrRQb.4806$AR6.284799@phobos.telenet-ops.be>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news2.google.com!newsfeed2.dallas1.level3.net!news.level3.com!crtntx1-snh1.gtei.net!news.gtei.net!chcgil2-snh1.gtei.net!news.bbnplanet.com!wn11feed!worldnet.att.net!204.71.34.3!newsfeed.cwix.com!ossa.telenet-ops.be!phobos.telenet-ops.be.POSTED!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII
X-Google-Thread: 107324,23eb4632f67c8cf9,start
X-Google-Attributes: gid107324,public
X-Google-Thread: fcea4,23eb4632f67c8cf9,start
X-Google-Attributes: gidfcea4,public
X-Google-ArrivalTime: 2004-01-25 07:40:39 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news2.google.com!newsfeed2.dallas1.level3.net!news.level3.com!crtntx1-snh1.gtei.net!news.gtei.net!chcgil2-snh1.gtei.net!news.bbnplanet.com!wn11feed!worldnet.att.net!204.71.34.3!newsfeed.cwix.com!ossa.telenet-ops.be!phobos.telenet-ops.be.POSTED!not-for-mail
From: "Passero" <bla@bla.bla>
Newsgroups: be.comp.programming,nl.comp.programmeren
Subject: [java]multithreading vraagje/probleem
Lines: 87
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2800.1158
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
Message-ID: <WrRQb.4806$AR6.284799@phobos.telenet-ops.be>
Date: Sun, 25 Jan 2004 15:40:38 GMT
NNTP-Posting-Host: 213.118.243.217
X-Complaints-To: abuse@telenet.be
X-Trace: phobos.telenet-ops.be 1075045238 213.118.243.217 (Sun, 25 Jan 2004 16:40:38 MET)
NNTP-Posting-Date: Sun, 25 Jan 2004 16:40:38 MET
Organization: Telenet Internet