Следующий код взят из документации Java (авторские права принадлежат компании Sun Microsystems)
Во многих случаях использование stop следует заменить кодом, который изменяет некоторые переменные для указания того, что целевая нить должна быть остановлена.
Целевая нить должна регулярно проверять эту переменную и возвращать из метода run в упорядоченном состоянии, если переменная указывает на необходимость остановки. Если целевая нить ожидает длительные периоды времени (например, переменную условия), следует применить метод interrupt для прерывания ожидания.
Use provided 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();
}
|
|