Thread.Join und Thread.State

7

Thread.Join gibt uns zurück, wenn der Thread abgeschlossen ist. Das gleiche können wir mit ThreadState ermitteln. Was ist der Unterschied zwischen Thread.Join () und Thread.ThreadState?

Können wir sie austauschbar verwenden?

    
Ram 31.08.2010, 17:11
quelle

4 Antworten

14

Der Unterschied zwischen Join und der Suche nach ThreadState ist, dass Join eine blockierende Operation ist. Die Funktion kehrt erst zurück, wenn das Zeitlimit erreicht ist oder das Ziel Thread abgeschlossen ist. Das Überprüfen der ThreadState ist eher eine Spähoperation.

    
JaredPar 31.08.2010, 17:14
quelle
6

Thread.join wartet auf den Abschluss des Threads. ThreadState gibt Ihnen nur einen Schnappschuss des Threads und kehrt ohne Warten zurück. Es gibt auch eine Variante von Thread.join, die eine Wartezeit braucht. ThreadState und Join sind sehr unterschiedlich und ich denke nicht, dass beide austauschbar verwendet werden können.

Probieren Sie einen Test aus, bei dem Sie beide Aufrufe eines Threads mit einer Endlosschleife ausführen.

    
NG. 31.08.2010 17:13
quelle
3

Wenn Sie Thread.Join() aufrufen, wird der aufrufende Thread blockiert, bis der Thread mit der Join-Methode abgeschlossen ist. Wenn es abgebrochen wird oder erfolgreich abgeschlossen wurde, blockiert Join (), das folgt, den aufrufenden Thread nicht. Dies ermöglicht Ihnen, 10 Worker-Threads und einen Haupt-Thread zu verwenden, die nach Abschluss aller 10 Threads ausgeführt werden müssen. So können Sie Join () für den ersten Thread aufrufen. Dieser Aufruf blockiert den Hauptthread, bis der erste Arbeitsthread abgeschlossen ist. Danach können Sie Join () im zweiten Thread usw. aufrufen, bis Sie zu Thread # 10 gelangen. Wenn Sie Join () aufrufen und der Hauptthread fortgesetzt wird, können Sie sicher sein, dass alle 10 abgeschlossenen Threads und der Hauptthread den Vorgang fortsetzen können.

Zum Beispiel:

%Vor%

Andererseits gibt Thread.ThreadState nur den Thread-Status zurück (Aborted, Running, ...) ohne den Zustand des aufrufenden Threads zu beeinflussen (nicht als Join, der den aufrufenden Thread in den Zustand WaitSleepJoin versetzt). Dies ist also nur nützlich, wenn Sie überprüfen möchten, was mit dem Thread passiert, damit Sie eine bestimmte Aktion ausführen können oder Sie Ihren eigenen Join-Mechanismus implementieren möchten und so weiter ...

    
Cipi 31.08.2010 17:26
quelle
0

Thread.Join blockiert den aufrufenden Thread

    
Hiber 01.09.2010 07:43
quelle

Tags und Links