为什么我的 interrupt() 没有杀死我的线程?
Why did my interrupt() not kill my thread?
我在 AEM 中有一个名为“helper”的 Java class,代码段如下所示:
public class Helper extends Thread{
................
private String glossaryText;
public String getGlossaryText() {
Thread thread = new Thread() {
public void run() {
glossaryText = getGlossaryHTML();
}
};
try {
thread.start();
}
catch(Exception e) {
}finally {
//this does NOT stop the thread
thread.interrupt();
}
System.out.println(thread.isAlive());
return glossaryText;
}
........
}
问题是,无论我做什么,System.out.println(thread.isAlive()); 总是打印“true”。 thread.interrupt(); 没有停止线程。
interrupt()
不起作用立即停止线程。它只是给线程的一个信号,它应该很快停止自己。您必须自己对此做出反应。
事实是,您不会等待线程结束。您只需启动线程,发出停止信号,然后检查它是否还活着。在 thread.start()
和您的打印之间执行线程的可能性非常小,但在大多数情况下,执行线程将结束处理 getGlossaryText()
.
你可以在你的 print 前面放一个 thread.join(500);
然后你的线程将不再存在,因为它等待线程被执行。
我在 AEM 中有一个名为“helper”的 Java class,代码段如下所示:
public class Helper extends Thread{
................
private String glossaryText;
public String getGlossaryText() {
Thread thread = new Thread() {
public void run() {
glossaryText = getGlossaryHTML();
}
};
try {
thread.start();
}
catch(Exception e) {
}finally {
//this does NOT stop the thread
thread.interrupt();
}
System.out.println(thread.isAlive());
return glossaryText;
}
........
}
问题是,无论我做什么,System.out.println(thread.isAlive()); 总是打印“true”。 thread.interrupt(); 没有停止线程。
interrupt()
不起作用立即停止线程。它只是给线程的一个信号,它应该很快停止自己。您必须自己对此做出反应。
事实是,您不会等待线程结束。您只需启动线程,发出停止信号,然后检查它是否还活着。在 thread.start()
和您的打印之间执行线程的可能性非常小,但在大多数情况下,执行线程将结束处理 getGlossaryText()
.
你可以在你的 print 前面放一个 thread.join(500);
然后你的线程将不再存在,因为它等待线程被执行。