Java退出while(true)来保持循环的线程,之前用过stop();
最近发现该方法已经不推荐使用,查阅相关资料,得出一种较为安全的退出方式:
步骤如下:
在线程类中加入volatile修饰的标记变量
private volatile boolean isStop = false;
调用interrupt()方法,并将该标记变量设为需求值
public void quit() {
//若希望线程退出,则置为true
isStop = true;
interrupt();
}
调用该方法会调用线程类的interrupt()方法,这个方法会产生一个InterruptedException,我们就可以在线程的run()方法中捕获到这个异常,在catch块中进行业务处理,非常适合使用while(true)来保持循环的线程.
捕获异常,判断是否需要结束线程
直接po代码
@Override
public void run() {
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
Request> request;
while (true) {
try {
// 执行业务逻辑
} catch (InterruptedException e) {
// 在此处判断是否跳出循环,若跳出循环,线程自动执行完成
if (isStop) {
return;
}
// 非我们发出的中断申请,线程继续执行
continue;
}
}
}
把这个try-cache块放在while循环的底部,可以防止非人为异常发生时导致的业务执行不完整.
调用方式:
//也可以带参执行,根据参数判断shi'fou
thread.quit();
以上,可以看出这种退出方式可以使线程通过正常的生命周期结束,因此推荐使用这种方式来结束线程.