Java Endlosschleife

8

Ich habe einen Thread, der nur funktionieren muss, wenn ein bestimmter Umstand eintritt. Ansonsten iteriert er einfach über eine leere Endlosschleife:

%Vor%

Beeinflusst es die Performance, wenn die Schleife tatsächlich nichts tut, aber prüfen muss, ob sie die Berechnung bei jeder Iteration durchführen muss? Nur wenn ich einen solchen Thread bei Bedarf erstelle, ist das für mich keine Option, da meine Klasse, die Runnable implementiert, ein visuelles Objekt ist, das immer angezeigt wird.

edit : Ist das folgende eine gute Lösung? Oder ist es besser, eine andere Methode (bezüglich der Leistung) zu verwenden?

%Vor%     
LPrc 13.06.2015, 21:08
quelle

4 Antworten

7

Sie sollten in Betracht ziehen, den Thread in den Ruhezustand zu versetzen und ihn erst dann zu aktivieren, wenn Ihre "Ball" -Variable wahr wird. Es gibt mehrere Möglichkeiten, dies zu tun, von den sehr niedrigen, wait - und notify -Anweisungen bis hin zu den java.util.concurrent -Klassen, die eine weniger fehleranfällige Vorgehensweise bieten. Sehen Sie sich die Dokumentation für die Bedingung -Schnittstelle an . Eine Datenstruktur wie eine BlockingQueue wäre ebenfalls eine Lösung.

    
Cosu 13.06.2015, 21:29
quelle
8

Ja, tut es. Dies ist die einfachste Implementierung von busy waiting und sollte nach Möglichkeit vermieden werden. Verwenden Sie die Methoden wait / notify oder java.util.concurrent . Vielleicht sollten Sie genauer angeben, was genau Sie erreichen möchten, um nützlichere Antworten zu erhalten.

    
SqueezyMo 13.06.2015 21:17
quelle
3

Ja, das wird sich sicherlich auf die Leistung auswirken. Um die Leistung zu erhöhen, können Sie in Ihrem Code eine gewisse Zeitverzögerung (z. B. 500 ms oder 1000 ms oder höher) einplanen, je nachdem, wie wichtig das Timing für Sie ist.

    
kojow7 13.06.2015 21:14
quelle
3

Teilen Sie ein BlockingQueue zwischen Ihren Threads.

%Vor%     
twentylemon 13.06.2015 21:16
quelle