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
294
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
Vain vasemmistolaiset rakennemuutokset pelastavat Suomen
Kansaa on ankeutettu viimeiset 30+ vuotta porvarillisella minäminä-talouspolitiikalla, jossa tavalliselta kansalta on ot1313970- 203558
Purra on kantanut vastuuta täyden kympin arvoisesti
Luottoluokituksen lasku, ennätysvelat ja ennätystyöttömyys siitä muutamana esimerkkinä. Jatkakoon hän hyvin aloittamaans173407- 793357
Persut huutaa taas: "kato! muslimi!"
Persut on lyhyessä ajassa ajaneet läpi kaksi työntekijöiden oikeuksien heikennystä, joita se on aiemmin vastustanut. Pe613254- 493061
- 292925
- 802769
- 542677
- 192387