Osaisiko joku neuvoa miten seuraavan koodin saa toimimaan niin että säikeet "keskustelevat" keskenään, eli A ja B sanovat yhden lauseen vuorollaan?
----- KOODI ALKAA ------
private class T1 extends Thread
{
private void sano(String str)
{
System.out.println("A: " str);
}
public void run()
{
sano("Terve!");
sano("Mitäs kuuluu?");
sano("Ihan hyvää kanssa");
sano("OK, näkyillään!");
sano("Moimoi!");
}
private class T2 extends Thread
{
public void sano(String str)
{
System.out.println("B: " str);
}
public void run()
{
sano("No terve!");
sano("Kiitos ihan hyvää, entä itsellesi?");
sano("Sehän on mukavaa, minun pitää nyt mennä");
sano("Moi!");
}
private T1 t1 = new T1();
private T2 t2 = new T2();
public void keskustele()
{
t1.start();
t2.start();
}
---- KOODI LOPPUU ---------
Nyt kun keskustele-metodia kutsuu niin vuorosanat tulee miten sattuu.
Keskustelevat säikeet harjoitus
1
287
Vastaukset
- Yksinkertainen esimerkki
Löytyisi varmaan valmiitakin ratkaisuja...
--- ESIMERKKI ALKAA ---
public class Esimerkki
{
private class PuhevuoronMyöntäjä
{
private int vuoro;
public PuhevuoronMyöntäjä(int vuoronumero) {
vuoro = vuoronumero;
}
public void odotaOmaaPuhevuoroa(int vuoronumero) {
while(vuoro != vuoronumero);
}
public void annaPuhevuoroToiselle(int vuoronumero) {
vuoro = vuoronumero;
}
}
private PuhevuoronMyöntäjä puhevuoro = new PuhevuoronMyöntäjä(1);
private class T1 extends Thread
{
private void sano(String str)
{
puhevuoro.odotaOmaaPuhevuoroa(1);
System.out.println("A: " str);
puhevuoro.annaPuhevuoroToiselle(2);
}
public void run()
{
sano("Terve!");
sano("Mitäs kuuluu?");
sano("Ihan hyvää kanssa");
sano("OK, näkyillään!");
sano("Moimoi!");
}
}
private class T2 extends Thread
{
public void sano(String str)
{
puhevuoro.odotaOmaaPuhevuoroa(2);
System.out.println("B: " str);
puhevuoro.annaPuhevuoroToiselle(1);
}
public void run()
{
sano("No terve!");
sano("Kiitos ihan hyvää, entä itsellesi?");
sano("Sehän on mukavaa, minun pitää nyt mennä");
sano("Moi!");
}
}
private T1 t1 = new T1();
private T2 t2 = new T2();
public void keskustele() {
t1.start();
t2.start();
}
public static void main(String[] args) {
new Esimerkki().keskustele();
}
}
--- ESIMERKKI LOPPUU ---
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Erään T miehen viimeinen aloitus tänne
Moi Olen kirjoittanut täällä säännöllisesti yli 5 vuotta. Kaivannut kuten kuuluukiin, mutta myös unohdellut ja selvitel364244Sanna vaihteeksi Australian "60 minuuttia" ohjelmassa
Kansanvälinen superstaramme esiintyi tällä kertaa toisella puolen maapalloa esitettävässä ohjelmassa. Kiinnostus on kova1442588Yritykset verolle ja yritystuet 10 mrd. eur/v pois
Kiristämistapauksissa yrityksille sanotaan hei hei. Suomi ei tarvitse yhteiskunnan rahoilla "yrittämistä". Yhteiskunta v992174Sanna Antikainen (ps) : Vornasen pyssy suututti demarit
https://www.suomenuutiset.fi/sanna-antikaisen-kolumni-vornasen-pyssy-suututti-demarit-mutta-kuka-puhuu-totta/ Vornasen221694Yritän saada sinut pois mielestäni ja ajatuksistani nainen
Turhaan. Mitä enemmän yritän, sitä enemmän haluan sinut ja sinua. Miten voitkaan olla niin ihana ja tuntua niin hyvältä.781666Riikka se runnoo työttömyyttä lisää
Menkää töihin! "15–74-vuotiaiden työttömyysasteen trendiluku oli lokakuussa 10,3 prosenttia. Työttömiä oli yhteensä 276131430Nyt meni maku vas.liittoon, kun vaativat minimituntipalkkaa lakiin
Sehän tarkoittaa samalla myös maksimituntipalkkaa, koska kun laki on kerran laadittu, niin sitä on vaikea muuttaa. Työma651426- 691348
Mun on pakko uskaltaa
Mikäköhän olisi pahin skenaario, jos vain laittaisin hänelle viestin, et haluan jutella meistä? Se, että hän vastaisi, e791331- 761293