مثال

public static final Boolean lock = Boolean.TRUE;

public static void main( String[] args ) {
Runnable runnable = new Runnable() {
public void run() {
synchronized ( lock ) {
while ( صحيح ) {
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 (حقوق النشر لشركة Sun Microsystems)
يجب استبدال الاستخدامات المتعددة لعبارة التوقف بكود يقوم بتعديل بعض المتغيرات للاشارة الى أنه يجب ايقاف تشغيل سلسلة العمليات المستهدفة.
يجب أن تقوم سلسلة العمليات المستهدفة بالتحقق من هذا المتغير بصفة دورية، وارجاع ما اذا كان المتغير يشير الى أنه سيتم ايقاف التشغيل من خلال طريقة التشغيل الخاصة بها بشكل متسلسل. اذا ظلت سلسلة العمليات المستهدفة في حالة انتظار لفترات طويلة (على سبيل المثال، في متغير الشرط)، يجب أن يتم استخدام طريقة المقاطعة لقطع حالة الانتظار.
استخدم StopSafeRunnable الذي تم ادخاله.

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

private boolean stopped = خطأ;
}

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