背景介绍:我们将线程进行平常的处理的状态称为作业中。当希望结束这个线程是,则送出终止请求。
接着这个线程,并不会马上结束,而会开始进行必要的刷新工作,这个状态为终止处理中。从作业中
改变成终止处理中是第一阶段。终止处理中时,不会进行平常操作。尽管线程还在进行,但进行的是
终止处理。直到终止处理结束后,才真正结束线程。终止处理中的操作结束,是第二阶段。
1.安全的结束(安全性)
2.一定会进行终止处理(生命性)
3.收到终止请求后,要尽快开始终止处理(响应性)
public class CountupThread extends Thread {
private long counter = 0;
private volatile boolean shutdownRequested = false;//保证内存同步
public void shutdownRequest() {
shutdownRequested = true;
interrupt();//保证生命性
}
public boolean isShutdownRequested() {
return shutdownRequested;
}
public final void run() {
try {
while (!isInterrupted()) {
doWork();
}
} catch (InterruptedException e) {
} finally {
doShutdown();
}
}
private void doWork() throws InterruptedException {
counter++;
System.out.println("doWork: counter = " + counter);
//Thread.sleep(500);
//此时不能检测到是否中断
try {
Thread.sleep(500);
} catch (InterruptedException e) {
}
}
private void doShutdown() {
System.out.println("doShutdown: counter = " + counter);
}
}