Далее приведена выдержка из документации по Java (авторские права - Sun Microsystems)
Часто stop следует заменить кодом, который изменяет переменную, указывающую, что целевая нить должна быть остановлена.
Целевая нить должна проверять эту переменную регулярно и вернуться должным образом из метода run, когда переменная указывает на остановку нити. Если целевая нить может долго ожидать (например, по переменной условия), то ожидание должно быть прервано методом прерывания.
Используйте 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( "Здравствуй, мир" );
try { Thread.sleep( 1000 ); } catch (InterruptedException e) {}
}
};
Thread thread = new Thread( runnable );
thread.start();
try { Thread.sleep( 3000 ); } catch (InterruptedException e) {}
runnable.stop();
}
|
|