Παράδειγμα

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();
}

Λύση
Ακολουθεί ένα απόσπασμα από το έγγραφο Java (copyright: Sun Microsystems)
Πολλές χρήσεις του stop πρέπει να αντικατασταθούν με κώδικα που απλά τροποποιεί ορισμένες μεταβλητές για να υποδείξει ότι το νήμα προορισμού πρέπει να σταματήσει να εκτελείται.
Το νήμα προορισμού πρέπει να ελέγχει συχνά αυτή τη μεταβλητή και να επιστρέφει με ομαλό τρόπο από τη μέθοδο εκτέλεσης εάν η μεταβλητή υποδείξει ότι πρέπει να τερματιστεί η εκτέλεσή του. Εάν το νήμα προορισμού παραμείνει σε αναμονή για μεγάλο χρονικό διάστημα (για παράδειγμα, σε μια μεταβλητή συνθήκης), για τη διακοπή της αναμονής πρέπει να χρησιμοποιηθεί η μέθοδος διακοπής.
Χρησιμοποιήστε το παρεχόμενο 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();
}