2017-01-04 8 views
1

Ich bin neu in Multithreading. Ich wäre froh, wenn jemand meine Zweifel klären könnte.Wie kann man zwei spezifische Threads verbinden?

Ich habe 3 Threads t1, t2 und t3. Wenn ich Join auf t1 wie unten verwende, warten alle anderen Threads auf das Ende von t1. Ist es möglich, dass ich nur t2 machen konnte, um auf t1 zu warten, damit t1 und t3 gleichzeitig laufen können?

t1.start(); 
    t1.join(); 
    t2.start(); 
    t3.start(); 
+2

Warum nicht die T3 bewegen. start() -Befehl vor dem t1.join()? Dann werden t1 und t3 gleichzeitig ausgeführt. – user152468

+0

Warum nicht den Code für t2 am Ende von t1 hinzufügen? –

Antwort

2

Wenn ich auf t1 wie unten verwenden verbinden, alle anderen Threads warten t1 zu beenden.

Nein, nur der Thread den t1.join() Aufruf ausgeführt wird warten t1 zu beenden. Alle anderen Threads werden fortgesetzt.

Ist es möglich, dass ich gerade t2 für t1 warten machen könnte, zu beenden, so dass t1 und t3 gleichzeitig ausgeführt werden können?

Ausführen des t1.join() von Code auf dem t2 Thread ausgeführt wird.

-1

Sie sollten start alle Fäden Sie gleichzeitig ausgeführt werden soll, bevor join auf einer von ihnen fordern, als joinmain Gewinde bis joined Thread endet blockiert. Also, wenn Sie t1 und t3 ausgeführt werden soll, und dann t2 starten, nachdem zunächst zwei abgeschlossen sind, sollten Sie

//Start t1, t3 
t1.start(); 
t3.start(); 
//Wait until t1 completes 
t1.join(); 
//Wait until t3 completes, if this is required 
t3.join(); 
//Start t2 
t2.start(); 
//Wait until t2 completes, if this is required 
t2.join(); 
-1

Ja: Sie können t3.start() tun, bevor t1.join():

t1.start(); 
t3.start(); 
t1.join(); 
t2.start(); 
Verwandte Themen