Exempel

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ösning
Följande är extraktet från Java-dokumentationen (copyright Sun Microsystems)
Många användningar av stopp bör ersättas av kod som enkelt ändrar vissa variabler för att indikera att måltråden ska sluta köras.
Måltråden bör kontrollera den här variabeln med jämna mellanrum och återgå från run-metoden på ett ordnat sätt om variabeln indikerar att den ska sluta köra. Om måltråden väntar länge (t.ex. på en villkorsvariable) ska avbrottsmetoden används för att avbryta väntan.
Använd tillhandahållen 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();
}