我遇到一个问题,即在调用.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对象数组)中执行所有操作时,它可以正常工作。为什么会这样?
答案 0 :(得分:2)
在getThreads()方法中,您可以创建新线程。第一次调用创建新线程并启动它们。然而,第二次调用也创建了新的线程,但从未启动,因此中断非运行的线程不起作用?