Article View: be.comp.programming
Article #3215[java]multithreading vraagje/probleem
From: Passero
Date: Sun, 25 Jan 2004 15:40
Date: Sun, 25 Jan 2004 15:40
85 lines
3155 bytes
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-mailShow 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