美文网首页
2020-04-14-线程终止的方法

2020-04-14-线程终止的方法

作者: 耿望 | 来源:发表于2020-04-14 15:41 被阅读0次

    Thread

    1. 使用终止标志位

    public class MThread extends Thread {
    
        private volatile AtomicBoolean alive;
    
        public MThread(String name) {
            super(name);
            alive = new AtomicBoolean(true);
        }
    
        public void terminate() {
            alive.set(false);
        }
    
        @Override
        public void run() {
            while (alive.get()) {
                //do something
            }
        }
    } 
    

    2. 使用中断

        @Override
        public void run() {
            try {
                while (true) {
                    //do something
                    if (isInterrupted()) {
                        throw new InterruptedException();
                    }
                }
            } catch (InterruptedException e) {
                
            }
        }
    }
    

    HandlerThread

    HandlerThread实际上类似上面的第一种方式,是使用标志位的方法来退出循环。
    之前分析过looper中有一个for循环不断从消息队列中取出消息,没有消息的情况下通过epoll_wait阻塞。
    当调用了quit方法之后,消息队列会返回null,从而退出循环。需要注意的是,这个时候未触发的消息是不会再触发的。

    相关文章

      网友评论

          本文标题:2020-04-14-线程终止的方法

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