Następujący kod pochodzi z dokumentacji języka Java (copyright Sun
Microsystems)
Wiele wywołań metody stop należy zastąpić kodem, który po prostu modyfikuje pewną zmienną, aby wskazać, że wątek docelowy ma być zatrzymany.
Wątek docelowy powinien sprawdzać taką zmienną regularnie i wracać ze swojej metody run w sposób uporządkowany, jeśli ta zmienna wskazuje, aby zatrzymać działanie wątku. Jeśli wątek docelowy oczekuje przez długi okres (na przykład na zmienną warunkową), do przerwania oczekiwania należy użyć metody interrupt.
Należy użyć udostępnionej metody 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" );
try { Thread.sleep( 1000 ); } catch (InterruptedException e) {}
}
};
Thread thread = new Thread(runnable);
thread.start();
try { Thread.sleep( 3000 ); } catch (InterruptedException e) {}
runnable.stop();
}
|
|