美文网首页
(三)线程的终止

(三)线程的终止

作者: 覆水无言 | 来源:发表于2020-03-11 16:21 被阅读0次

    Java多线程目录

    前提

    刚接触线程时一直想怎么立刻停止线程,现在了解了,对于现在电脑来说,立刻终止线程会造成各种各样的问题,所以在Java中,线程的终止就是为了让线程自动执行完,下面终止线程的方法最终目的都是这样。

    中断

    中断是当前线程的一个标志位,在线程内外的表现就是true/false,
    中断的三个方法

    public void interrupt();   //设置中断
    public boolean isInterrupted();  //只判断标记位
    public static boolean interrupted();  //静态方法,判断标记为并清除标记位
    

    这里在实例中说明这三个方法

    public class ThreadOne extends Thread{
        @Override
        public void run() {
            super.run();
            while (!Thread.currentThread().isInterrupted()) {
                System.out.println("1::" + Thread.currentThread().isInterrupted());
            }
            System.out.println("线程结束1:" + Thread.currentThread().isInterrupted());
    
            System.out.println("线程结束2:" + Thread.interrupted());
            System.out.println("线程结束3:" + Thread.interrupted());
        }
    
        public static void main(String[] args) {
    
            ThreadOne one = new ThreadOne();
            one.start();
    
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            one.interrupt();
        }
    }
    

    输出:

    1::false
    1::false
    1::false
    1::false
    线程结束1:true
    线程结束2:true
    线程结束3:false
    

    这样就可以安全的利用中断来停止我们的线程。
    注意:中断并不会立即停止我们的线程,它只会设置标志位,来让线程主动检测,后我们自己设置线程停止返回逻辑。

    自己设置标记位

    和中断思路一样,我们自己设置标记为是一样的效果。

    public class ThreadOne extends Thread {
    
        private volatile boolean end = false;
        @Override
        public void run() {
            super.run();
    
            while (!end) {
                System.out.println("1::" + end);
            }
            System.out.println("线程结束1:" + end);
        }
    
        public void cancle(){
            this.end = true;
        }
    
        public static void main(String[] args) {
    
            ThreadOne one = new ThreadOne();
            one.start();
    
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            one.cancle();
        }
        
    }
    
    

    相关文章

      网友评论

          本文标题:(三)线程的终止

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