中断后线程不会停止

时间:2016-05-01 15:17:52

标签: java multithreading

我遇到一个问题,即在调用.interrupt()方法后线程不会停止。有一个代码段

for (Thread t : letters.getThreads()) t.start();

    Thread.sleep(5000);

for (Thread t : letters.getThreads()) t.interrupt();

getThreads()方法来自类Letters(字母是类的对象),它返回Thread对象的数组。这里有来自Letters类的方法体:

public Thread[] getThreads() {
    Thread[] threads = new Thread[letters.length];

    for(int i = 0; i < threads.length; i++) {
        threads[i] = new Thread( () -> {
                while(true) {
                    try {
                        System.out.print("a");
                        Thread.sleep(1000);
                    } catch (InterruptedException ex) {
                        return;
                    }
                }
        }
        ,"Thread " + letters[i]); //letters[] is a local array.            
        }
    return threads;
}

在我描述的这种情况下,线程不会停止工作,但是当我在main mathod(Threads对象数组)中执行所有操作时,它可以正常工作。为什么会这样?

1 个答案:

答案 0 :(得分:2)

在getThreads()方法中,您可以创建新线程。第一次调用创建新线程并启动它们。然而,第二次调用也创建了新的线程,但从未启动,因此中断非运行的线程不起作用?