2012-10-21 14 views
5

Mögliche Duplizieren:
How do you kill a thread in Java?
How to start/stop/restart a thread in Java?Wie stoppe ich einen Java-Thread?

Thread hat folgende Funktionen:

  • destroy()
  • stop()
  • suspend()

, aber sie alle sind veraltet.
Was verwenden Sie, um einen Thread zu stoppen?

+0

Sie stoppen einen Thread nicht, lassen Sie einfach die 'run'-Methode ihre Ausführung beenden. –

+0

Können Sie Ihren Anwendungsfall näher erläutern, warum Sie einen Thread stoppen möchten? – Vikdor

+0

Der Vollständigkeit halber ist die andere Möglichkeit, den gesamten Prozess zu beenden - das wird funktionieren. –

Antwort

4

Sie sollten sicherstellen, dass es nur durch/läuft, wenn es sein soll.

Überprüfen Sie this für Erklärung.

3

Sie können ein boolesches Flag verwenden, um den Thread zu stoppen. Sie können auch Thread.isInterrupted() verwenden, um zu überprüfen, ob der Thread unterbrochen wurde, und den Rest der Arbeit ignorieren, genauso wie das boolesche Flag.

class Worker implements Runnable { 
    private volatile boolean shouldRun = true; 

    @Override 
    public void run() { 
     while (shouldRun) { 
      // your code here 
     } 
    } 

    public void cancel() 
    { 
     shouldRun = false; 
    } 
} 

Wenn Sie wissen wan, warum diese Funktionen veraltet sind, können Sie Java Thread Primitive Deprecation

2

Sie überprüfen könnte es wie folgt tun:

private boolean running = true; 

public void stop() { 
    running = false; 
}  

public void run() { 
    while (running) { 
     //your code goes here 
    } 
} 

Dies ist nur eine einfache Möglichkeit, die Lauf- der Vermietung Methode einfach aussterben.

+1

+1 läuft muss "flüchtig" sein, sonst wird der run() nie aufhören. –

2

Sie bitten ihn höflich, seine Arbeit zu beenden. Der Thread sollte sich gut benehmen und er sollte seine Arbeit beenden, wenn er gefragt wird.

Um zu fragen, verwenden Sie Thread.interrupt(), die entweder InterruptedException werfen (wenn der Thread wartet) oder setzen Sie eine Markierung in den Thread (wenn nicht warten).

Der Thread sollte dann seine Arbeit beenden, wenn es eine InterruptException fängt oder wenn es viel eine lange Arbeit (ohne Schlaf/Warte) tut, sollte es von Zeit zu Zeit überprüfen, ob es unterbrochen wurde und wenn ja.

0

Die Methoden, die Sie erwähnt haben, sind veraltet, weil sie einmal das System in den instabilen Zustand bringen konnten: es ist genau wie der Kill-Prozess. Die Verwendung dieser Methoden gibt dem Thread keine Chance, ordnungsgemäß zu beenden.

Die Schlussfolgerung ist, dass jeder Thread, den Sie implementieren, seinen eigenen Mechanismus für einen eleganten Ausgang haben sollte. Normalerweise tun Sie Folgendes. Erstellen Sie boolean Flag 10 das ist false standardmäßig.

while (!exit) { 
    // do the job 
} 

Add-Methode exit(), die diesen Flag auf true drehen, so dass, wenn das Verfahren von außerhalb des Thread, verläßt die while Schleife bei der nächsten Iteration genannt wird: Der run() Methode Thread soll Schleife wie implementieren.Sie sollten darauf achten, Ressourcen beim Beenden zu schließen.

Natürlich kann man den Mechanismus verbessern, indem

0

Jeder Thread singen Senden läuft seine Arbeit zu tun. Es sollte sich selbst entscheiden, ob es noch mehr zu tun gibt. Wenn Sie einen funktionierenden Thread stoppen möchten, bedeutet dies, dass der Thread denkt, dass die Arbeit existiert, aber Sie möchten nicht, dass der Thread dies tut. Dies ist definitiv ein Problem in Ihrem Design. In einem gut gestalteten Problem ist es nicht notwendig, Threads anzuhalten/fortzusetzen.

Verwandte Themen