Springen naar inhoud

Java communicatie tussen twee threads.


  • Log in om te kunnen reageren

#1

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 05 mei 2013 - 16:27

Ik heb volgende java probleem:

een eerste class waarin ik een aantal initialisatie doe waarna ik terecht kom in een oneindige while loop.
in mijn eerste initialisatie roep ik volgende code op:

Runnable t1=(new Runnable() {
            public void run() {
              jframe_menu.createAndShowGUI();

            }; 
        });
     t1.run(); 

nadien in mijn while loop had ik graag gewacht op nieuwe input uit t1 alleen lukt het me langs geen kanten te wachten tot dat er in t1 iets veranderd en dan weer door te gaan.

Hoe doe ik dat?
Groeten.

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 05 mei 2013 - 16:38

Kan je de wachtende thread niet op pauze zetten voor onbepaalde tijd via een sleep methode ofzo? Als de t1 dan input heeft voor die thread, dan kan hij die ergens in een lijst ofzo wegschrijven en de thread wakker maken. Wanneer de input verwerkt is, kan de thread weer gaan slapen. Dat is zou efficiënter moeten zijn dan een oneindige loop waarbij je steeds gewoon kijkt of je nieuwe input hebt gekregen.

#3

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 05 mei 2013 - 17:32

het zit zo ik heb de code in de main:
initialisatie;
en dan 
while(true)
do some work;
wacht op t1;
end
het wachten op t1 krijg ik niet geïmplementeerd.

#4

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 05 mei 2013 - 19:07

Als je t1.join() aanroept dan zeg je dat er gewacht moet worden tot de Thread t1 eindigt.

Als t1 niet eindigt, maar gewoon periodisch resultaten aan t2 wil geven ofzo dan zijn er verschillende opties.
Je kan een mutex object aanmaken dat door t1 gelocked wordt. Je kan dan in t2 proberen van dat object ook te locken en dan zal Java t2 automatisch laten wachten tot dat lock vrijgegeven wordt. Als t1 klaar is met zijn werk, dan kan hij het lock opgeven en dan zal automatisch t2 geactiveerd worden.

Wat ook kan werken is dat je in t2 een constructie als volgt zet:
try {
  while(true)
	t2.sleep(4000);
} catch (InterruptedException e) {
  // ga verder
}
Als t1 dan klaar is kan t2.interrupt() aangeroepen worden.

Anders kan je ook hier of hier misschien inspiratie opdoen.





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures