Java线程安全退出的方法

Java退出while(true)来保持循环的线程,之前用过stop();
最近发现该方法已经不推荐使用,查阅相关资料,得出一种较为安全的退出方式:
步骤如下:

  1. 在线程类中加入volatile修饰的标记变量
private volatile boolean isStop = false;
  1. 调用interrupt()方法,并将该标记变量设为需求值
public void quit() {
                //若希望线程退出,则置为true
        isStop = true;
        interrupt();
    }

调用该方法会调用线程类的interrupt()方法,这个方法会产生一个InterruptedException,我们就可以在线程的run()方法中捕获到这个异常,在catch块中进行业务处理,非常适合使用while(true)来保持循环的线程.

  1. 捕获异常,判断是否需要结束线程
    直接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();

以上,可以看出这种退出方式可以使线程通过正常的生命周期结束,因此推荐使用这种方式来结束线程.

你可能感兴趣的:(Java线程安全退出的方法)