美文网首页
Java多线程学习-3 正常停止一个线程

Java多线程学习-3 正常停止一个线程

作者: 邵增卫 | 来源:发表于2019-05-04 13:56 被阅读0次

    前面两节学习了启动一个线程以及线程的主要API,这一节主要介绍如何停止一个线程。

    ** 强烈建议不要使用线程的stop方法粗鲁的停止线程,因为stop方法会导致很多问题,例如:线程正在执行某个重要的不可中断的原子性操作,会导致数据的不一致;更重要的一点stop方法,可能不会释放mointor锁。

    1. 正常的停止,当一个线程完成逻辑处理之后,自动退出。
    2. 捕获外部传入中断信号(interrupt)信号;
      1. 在逻辑中判断 isInterrupted,来决定线程是否退出
      2. 在逻辑中有可中断的方法,处理InterruptException来终止。
    3. 使用volatile开关控制,这里思考一下我们为什么要使用volatile修饰开关,
    public class VolatileSwitch extends Thread{
    
        private volatile boolean close;
        
        public void run() {
        
            while (!close && !isInterrupted()){
                try {
                    TimeUnit.SECONDS.sleep(10);
                } catch (InterruptedException e) {
                    System.out.println("interrupted");
                }
            }
        }
        
        public void close(){
            this.close = true;
            interrupt();
        }
    }
    
    1. 异常退出,Thread和Runnable的run方法都不能抛出任何Exception,但是我们可以抛出RunnableException停止线程。

    相关文章

      网友评论

          本文标题:Java多线程学习-3 正常停止一个线程

          本文链接:https://www.haomeiwen.com/subject/eyeznqtx.html