方式一:通过布尔变量,侵入业务逻辑,实现是声明quit方法,修改boolean值,在业务逻辑过程中,判断booean值,决定是否退出操作,释放资源,退出线程。
方式二:通过interrupt中断操作来执行。线程对象里会维护一个interrupt值,标记是否中断状态为真。在sleep,wait,join等阻塞业务时,轮循判断interrupt值,为真时,则抛出InterruptedException,并reset interrupt值为false;若interrupt值为false,则继续阻塞。
private volatile Interruptible blocker;
public void interrupt() {
if (this != Thread.currentThread())
checkAccess();
synchronized (blockerLock) {
Interruptible b = blocker;
if (b != null) {
interrupt0(); // Just to set the interrupt flag
b.interrupt(this);
return;
}
}
interrupt0();
}
也可通过实现Interruptible接口的interrupt(Thread t)方法,操作t线程退出相关操作
网友评论