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
282
Vastaukset
- Yksinkertainen esimerkkiLö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
- Sanna Marin teki sen, mihin muut eivät pystyneet - sote kerralla maaliinYli 15 vuotta Suomessa vatvottu sote-uudistus meni lopulta läpi Sanna Marinin hallituksen aikana. Edeltävät hallitukset424905
- Enää viisi yötä Sannan kirjaanIhan täpinöissään tässä odotellaan. Vaikea pysytellä aloillaan, kun koko ajan tekisi mieli jo kirjakauppaan rynnätä, mut183646
- Marinin hallitus hyväksyi soten (105-77) vuonna 2021vastaan äänesti Kok, persut, KD, Liike Nyt. Nyt on sitten käynyt niin kuin on käynyt. Pääkirjoitus: Sanna Marin jätti693443
- Lehtinen: "Oli demareidenkin onni, että valkoiset voittivat sodan 1918"Lasse Lehtisen mukaan vasemmalla on radiohiljaisuus hänen uutuuskirjastaan, "Läheltä piti. Kansakunnan hurjat hetket" L1012798
- SDP:n valtuutettu valehtelee koulutuksensaSDP:n helsinkiläinen kaupunginvaltuutettu Mahad Ahmed käyttää maisterin titteliä suoritettuaan 60 opintopisteen epäviral862670
- IL - 100 000 potentiaalista sotilasta pakeni Ukrainasta!"Ukrainasta nuorten miesten joukkopako Liki 100 000 asevelvollisuusikäistä miestä on poistunut Ukrainasta parin viime k302620
- Anteeksi TAamulla olit iloisena huomenta toivottamassa ja minä naama mutrussa sanoi huomenet takaisin. Tajusin vasta yläkerrassa161693
- En mä tahallani ole näin hankala.Mulla oli kuusi vuotta sitten vähän samanlainen tilanne ja se päättyi huonosti. Ilmeisesti kuvittelin kaiken silloin ta161536
- Harmittaako mies, että yhteys katkesi?Olisitko halunnut, että olisi säilynyt jonkinlainen yhteys vai oliko parempi polttaa sillat takana?2011428
- 1521311