🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #3218

Re: [java]multithreading vraagje/probleem

#3218
From: F. Henninger
Date: Sun, 25 Jan 2004 17:36
136 lines
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-mail
References: <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>