Article View: be.comp.programming
Article #3218Re: [java]multithreading vraagje/probleem
From: F. Henninger
Date: Sun, 25 Jan 2004 17:36
Date: Sun, 25 Jan 2004 17:36
136 lines
4907 bytes
4907 bytes
This is a multi-part message in MIME format.
--------------080406010105090207050907
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: quoted-printable
Passero wrote:
> Morgen heb ik examen java en ben enkele oefeningen aan het maken. 1 van=
die
> oefeningen lukt niet echt. All=E9 ze werkt, ik krijg geen fouten maar b=
en niet
> zeker of het fout is. Het gaat om volgende oefening:
> We moeten een restaurant simuleren met 1 kok en 2 kelners. Een kelner m=
oet
> 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 z=
o 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 opdra=
chten
> na elkaar doet? Waar zit dan mijn fout in mijn code?
>=20
> [knip code]
Simpel, wat je nu doet is het volgende:
1. Wacht een tijdje
2. Roep methode van Kelner A aan
3. Wacht een tijdje
4. Roep methode van Kelner B aan
5. Ga naar 1.
Voor het bovenstaande heb je niet echt multitrheading nodig, wat je=20
wilt doen is het volgende:
- Start Kelner A en B
1. Kelner A wacht een tijdje || Kelner B wacht een tijdje
2. Kelner A levert order in || Kelner B levert een order in
3. Ga naar 1.
Hierbij stelt '||' het concept 'gelijktijdig met' voor.
Ik heb je meegeleverde code wat aangepast zodat het wel parallel werkt.
--=20
Francis Henninger
Studying something called Computer Science
University of Twente
The Netherlands
--------------080406010105090207050907
Content-Type: text/plain;
name="Kok.java"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="Kok.java"
public class Kok
{
private Kelner piet;
private Kelner jan;
private Object lock; //Synchronisatie object
public Kok()
{
piet = new Kelner("Piet",this);
jan = new Kelner("Jan",this);
lock = new Object();
System.out.println("Klaar voor bereiden");
piet.start();
jan.start();
}
public void krijgOpdracht(String opdracht, Kelner k)
{
synchronized(lock) //Wacht tot dat de kok vrij is
{
System.out.println(k.getNaam() + " : " + opdracht);
k.actieKok("Schop uit keuken: " + k.getNaam());
}
}
public static void main(String[] args)
{
Kok kok = new Kok();
}
}
--------------080406010105090207050907
Content-Type: text/plain;
name="Kelner.java"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="Kelner.java"
public class Kelner extends Thread
{
private String naam;
private Kok deKok;
public Kelner(String eenNaam, Kok eenKok)
{
naam = eenNaam;
deKok = eenKok;
}
public void run()
{
while(true)
{
try
{
double sleepTime = Math.random() * 2000;
Thread.sleep((long)sleepTime);
deKok.krijgOpdracht("Feed me!" + sleepTime, this);
}
catch (InterruptedException ie) //Negeren
{
}
}
}
public void actieKok(String actie)
{
System.out.println(actie);
}
public String getNaam()
{
return naam;
}
}
--------------080406010105090207050907--
Technical Details
Message-ID:
<bv0uqp$j6$1@netlx020.civ.utwente.nl>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news2.google.com!newsfeed2.dallas1.level3.net!news.level3.com!crtntx1-snh1.gtei.net!chcgil2-snh1.gtei.net!news.bbnplanet.com!nycmny1-snf1.gtei.net!news.gtei.net!colt.net!pop-news-1.colt-telecom.nl!newsgate.cistron.nl!news.cambrium.nl!news.cambrium.nl!news.cambrium.nl!humbolt.nl.linux.org!news.nl.linux.org!news.utwente.nl!not-for-mailReferences:
<WrRQb.4806$AR6.284799@phobos.telenet-ops.be>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII X-Google-Thread: 107324,23eb4632f67c8cf9 X-Google-Attributes: gid107324,public X-Google-Thread: fcea4,23eb4632f67c8cf9 X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2004-01-25 09:36:27 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news2.google.com!newsfeed2.dallas1.level3.net!news.level3.com!crtntx1-snh1.gtei.net!chcgil2-snh1.gtei.net!news.bbnplanet.com!nycmny1-snf1.gtei.net!news.gtei.net!colt.net!pop-news-1.colt-telecom.nl!newsgate.cistron.nl!news.cambrium.nl!news.cambrium.nl!news.cambrium.nl!humbolt.nl.linux.org!news.nl.linux.org!news.utwente.nl!not-for-mail From: "F. Henninger" <fgjojsurname_canned_food@student.utwente.nl> Newsgroups: be.comp.programming,nl.comp.programmeren Subject: Re: [java]multithreading vraagje/probleem Date: Sun, 25 Jan 2004 18:36:25 +0100 Organization: University of Twente, Enschede, The Netherlands Lines: 136 Message-ID: <bv0uqp$j6$1@netlx020.civ.utwente.nl> References: <WrRQb.4806$AR6.284799@phobos.telenet-ops.be> NNTP-Posting-Host: saampjesserver.student.utwente.nl Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------080406010105090207050907" X-Trace: netlx020.civ.utwente.nl 1075052185 614 130.89.160.188 (25 Jan 2004 17:36:25 GMT) X-Complaints-To: abuse@utwente.nl NNTP-Posting-Date: Sun, 25 Jan 2004 17:36:25 +0000 (UTC) User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.6) Gecko/20040113 X-Accept-Language: en-us In-Reply-To: <WrRQb.4806$AR6.284799@phobos.telenet-ops.be>