Keskustelevat säikeet harjoitus

apua tarvittais :/

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.
   

1

268

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • 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

    1. Mistä puhuitte viimeksi kun näitte

      Kerro yksi aiheista
      Ikävä
      101
      7463
    2. 83
      5092
    3. Se on hyvästi

      Toivottavasti ei tavata.
      Ikävä
      79
      4889
    4. Olenko saanut sinut koukkuun?

      Hyvä. Rakastan sua.
      Ikävä
      132
      4288
    5. Alavuden sairaala

      Säästääkö Alavuden sairaala sähkössä. Kävin Sunnuntaina vast. otolla. Odotushuone ja käytävä jolla lääkäri otti vastaan
      Ähtäri
      10
      3068
    6. Miksi sä valitsit

      Juuri minut sieltä?
      Ikävä
      52
      2709
    7. Sisäsiittosuus

      Tämän kevään ylioppilaista 90% oli sama sukunimi?
      Suomussalmi
      43
      2632
    8. Kerro nyt rehellisesti fiilikset?

      Rehellinem fiilis
      Suhteet
      53
      2267
    9. Törkeää toimintaa

      Todella törkeitä kaheleita niitä on Ylivieskassakin. https://www.ess.fi/uutissuomalainen/8570818
      Ylivieska
      11
      2243
    10. Suudeltiin unessa viime yönä

      Oltiin jossain rannalla jonkun avolava auton lavalla, jossa oli patja ja peitto. Uni päättyi, kun kömmit viereeni tähtit
      Ikävä
      21
      1860
    Aihe