如何正确停止线程

关于如何正确停止线程,这篇文章(how to stop thread)给出了一个很好的答案, 总结起来就下面3点(在停止线程时):
1. 使用violate boolean变量来标识线程是否停止
2. 停止线程时,需要调用停止线程的interrupt()方法,因为线程有可能在wait()或sleep(), 提高停止线程的即时性
3. 对于blocking IO的处理,尽量使用InterruptibleChannel来代替blocking IO
核心如下:
If you are writing your own small thread then you should follow the following example code.
private volatile Thread myThread;
public void stopMyThread() {
    Thread tmpThread = myThread;
    myThread = null;
    if (tmpThread != null) {
        tmpThread.interrupt();
    }
}


public void run() {
    if (myThread == null) {
       return; // stopped before started.
    }
    try {
        // all the run() method's code goes here
        ...
        // do some work
        Thread.yield(); // let another thread have some time perhaps to stop this one.
        if (Thread.currentThread().isInterrupted()) {
           throw new InterruptedException("Stopped by ifInterruptedStop()");
        }
        // do some more work
        ...
    } catch (Throwable t) {
       // log/handle all errors here
    }
}

posted @ 2015-07-11 22:57  aprial  阅读(139)  评论(0编辑  收藏  举报