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

2020-04-14  本文已影响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,从而退出循环。需要注意的是,这个时候未触发的消息是不会再触发的。

上一篇下一篇

猜你喜欢

热点阅读