Beispiel

public static final Boolean lock = Boolean.TRUE;

public static void main( String[] args ) {
Runnable runnable = new Runnable() {
public void run() {
synchronized ( lock ) {
while ( true ) {
System.out.println( "Hello World!" ); //$NON-NLS-1$
try { wait( 1000 ); } catch (InterruptedException e) {}
}
}
}
};
Thread thread = new Thread(runnable);
thread.start();
try { Thread.sleep( 3000 ); } catch (InterruptedException e) {}
thread.stop();
}

Lösung
Der folgende Code ist ein Ausschnitt aus dem Javadoc (Copyright: Sun Microsystems).
Viele Verwendungen von 'stop' sollten durch Code ersetzt werden, der lediglich eine bestimmte Variable ändert, um anzugeben, dass die Ausführung des Zielthreads gestoppt werden soll.
Der Zielthread sollte diese Variable regelmäßig überprüfen und seine Methode 'run' ordnungsgemäß beenden, falls die Variable angibt, dass die Ausführung gestoppt werden soll. Falls sich der Zielthread für längere Zeiträume im Wartestatus befindet (z. B. bei einer Bedingungsvariablen), sollte die Methode 'interrupt' verwendet werden, um den Wartestatus zu unterbrechen.
Verwenden Sie die bereitgestellte Klasse 'StopSafeRunnable'.

public static abstract class StopSafeRunnable implements Runnable {
public final void run() {
while ( !stopped ) {
doRun();
}
}
public void stop() {
stopped = true;
}
public boolean isStopped() {
return stopped;
}
protected abstract void doRun();

private boolean stopped = false;
}

public static void main(String[] args) {
StopSafeRunnable runnable = new StopSafeRunnable() {
public void doRun() {
System.out.println( "Hello World" ); //$NON-NLS-1$
try { Thread.sleep( 1000 ); } catch (InterruptedException e) {}
}
};
Thread thread = new Thread(runnable);
thread.start();
try { Thread.sleep( 3000 ); } catch (InterruptedException e) {}
runnable.stop();
}