Java线程中断:interrupt()vs stop()

时间:2014-05-26 16:03:19

标签: java multithreading methods interruption

在Java中使用线程时遇到问题。在用于中断Java中的线程的interrupt()和stop()之间首选的方法是什么?为什么?

感谢您的回复。

2 个答案:

答案 0 :(得分:1)

从理论上讲,你提出问题的方式,无论是什么,一个线程都必须通过同步标志来终止它。

这是通过使用interrupt()方法完成的,但是只有当你的线程处于等待/休眠状态(并且在这种情况下抛出异常)时你应该明白这个“有效”,否则你必须检查自己,在线程的run()方法内,如果线程被中断(使用isInterrupted()方法),并在需要时退出。例如:

public class Test {
    public static void main(String args[]) {
        A a = new A(); //create thread object
        a.start(); //call the run() method in a new/separate thread)
        //do something/wait for the right moment to interrupt the thread
        a.interrupt(); //set a flag indicating you want to interrupt the thread

        //at this point the thread may or may not still running 

    }
}

class A extends Thread {

    @Override
    public void run() { //method executed in a separated thread
        while (!this.isInterrupted()) { //check if someone want to interrupt the thread
            //do something          
        } //at the end of every cycle, check the interrupted flag, if set exit
    }
}

答案 1 :(得分:0)

Thread.stop()已在java 8中弃用,所以我想说Thread.interrupt()是可行的方法。在oracles site有一个冗长的解释。它还提供了如何使用线程的一个很好的例子。