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 Auszug ist aus 'Java doc' (Copyright Sun Microsystems)
Viele Verwendungen von 'stop' sollten durch Code ersetzt werden, der einfach einige Variablen ändert, um anzugeben, dass die Ausführung des Zielthreads gestoppt werden soll.
Der Zielthread sollte diese Variablen regelmäßig überprüfen und aus seiner Ausführungsmethode in ordnungsgemäßer Form zurückkehren, falls die Variable angibt, dass die Ausführung gestoppt werden soll. Falls der Zielthread während langer Zeiträume warten muss (beispielsweise auf eine Bedingungsvariable), sollte der Wartestatus mit der Unterbrechungsmethode (interrupt) unterbrochen werden.
Verwenden Sie den zur Verfügung gestellten Code '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();
}