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
219
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
Voitasko leikkiä jotain tunnisteleikkiä?
Tietäisi ketä täällä käy kaipaamassa.. kerro jotain mikä liittyy sinuun ja häneen eikä muut tiedä. Vastaan itsekin kohta791947Tietysti jokainen ansaitsee
Hän varmasti ansaitsee vain parasta ja sopivinta tietenkin, suon sen onnen hänelle enemmän kuin mielelläni. Aika on nyt191733- 161594
50+ naiset kyl
Lemottaa sillille mut myös niitte kaka lemottaa pahlle ku kävin naiste veskis nuuhiin201336Välitän sinusta mies
Kaikki mitä yritin kertoa tänään ei mennyt ihan putkeen..Joka jäi jälkeenpäin ajateltuna suoraan sanottuna harmittaa aiv61252En voi sille mitään
Tulen niin pahalle tuulelle tästä paikasta nykyisin. Nähnyt ja lukenut jo kaiken ja teidän juttu on samaa illasta toisee121244hieman diabetes...
Kävin eilen kaverin kanssa keskusapteekissa kun on muutama kuukausi sitten tullut suomesta ja oli diabetes insuliinit lo121226Jotain puuttuu
Kun en sinua näe. Et ehkä arvaisi, mutta olen arka kuin alaston koivu lehtiä vailla, talven jäljiltä, kun ajattelen sinu451203Miten joku voi käyttää koko elämänsä
siihen että nostelee täällä vanhoja ketjuja ja troIIaa niihin jotain linkkiä mitä kukaan ei avaa? Ihmisellä ei ole mitää101202Annetaanko olla vaan
Siinä se, tavallaan kysymys ja toteamuskin. Niin turhaa, niin rikkovaa. On niin äärettömän tärkeä, ja rakas olo.. N291181