2016-06-01 4 views
0

Wie man einen Thread warten, bis ein anderer Thread seine Ausführung in Java abgeschlossen hat? Mit while (true) wird warten. Aber ist es eine gute Programmierpraxis?Using while (true) ein besserer Ansatz, um in android Hintergrund Threads einzuführen

Aber wird es das Telefon erhitzen?

+1

Nein. Verwenden Sie einen Monitor und rufen Sie 'Object.wait' auf (oder verbinden Sie einen Thread, indem Sie' Thread.join' aufrufen), wenn Sie wirklich auf die Low-Level-Ebene gehen müssen. Oder verwenden Sie die vielen High-Level-Synchronisierungsfunktionen, die von der Java-API (und einigen speziell für Android) bereitgestellt werden. – Mena

Antwort

4

Ich Riegel eine Zählung verwenden würde (hier einige Pseudo-Code - also ich es nicht kompilieren oder ausführen, es ist nur eine Idee zu geben).

Der Vorteil ist, das ist ziemlich hoch und wir können auch auf mehrere Dinge warten, indem Sie verschiedene Zählungen verwenden.

+0

Vielen Dank Spa .. Wirklich geholfen .. –

1

Kommt drauf an. Check out:

while (true) { 
    if (shouldBreakOnSomeCondition()) { 
     break; 
    } 
} 

gegen

while (true) { 
    if (shouldBreakOnSomeCondition()) { 
     break; 
    } 
    sleep some time 
} 

Die erste wäre "aktiv" warten ... und eine Menge an CPU-Zyklen zu verbrennen.

Die zweite Sache ist weniger Ressourcenverbrauch; aber idealerweise würdest du immer noch versuchen, es zu vermeiden; Verwenden der eingebauten Benachrichtigungsmechanismen; wie wait() und notify(); oder fortgeschrittenere Ideen wie join().

2

Eine bessere Möglichkeit, es zu tun ist, zu nennen:

threadThatYouWantToWaitFor.join() 

im anderen Thread.

1

Sie müssen die Methode wait of class Object verwenden.

synchronized(obj) { 
    while (test) { 
     obj.wait(); 
    } 
} 

Und in dem anderen Thread

synchronized(obj) { 
    test = true; 
    obj.notifyAll(); 
} 
+0

Das würde eine "IllegalMonitorStateException" verursachen, weil Sie nicht ohne den Obj Monitor benachrichtigen können. – zapl

+0

@zapl true .... war ein Tippfehler, ich habe notifyAll in den synchronisierten Block eingefügt. Vielen Dank! –

Verwandte Themen