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
316
Vastaukset 1
- 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
Olivia Oras
"Yle MOT:n tietojen mukaan Oras oli joutunut sairaalahoitoon helsinkiläisellä kauneusklinikalla tehdyn rasvaimun yhteyde1552167MOT: Nuoren Olivia Oraksen, 27 surullinen kuolema kauneusoperaatiossa :(
MOT:n tietojen mukaan Oras menetti tajuntansa rasvaimua edeltäneessä puudutuksessa. Hänet kuljetettiin Husiin, ja hän ku1341221- 1421175
- 47991
Haluatko että unohdan sinut kokonaan
Siihen suuntaan ollaan menossa, nyt jo. Ja ehkä parempi näin, niin ei kulu energiaa hukkaan mahdottomuuteen. Ja vaikka j72968- 60906
- 78739
- 38727
- 34697
Ylen typerät rinnastukset.
Näin YLE…..Saksassa ei ole äärioikeisto ollut vallassa sitten Hitlerin . YLEn toimittajille tiedoksi . Hitler oli Saksan245674