如何解决为什么我的interrupt没有杀死我的线程?
我在AEM中有一个名为“ helper”的Java类,代码段如下所示:
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()
。
您可以只在打印内容前放置一个thread.join(500);
,然后您的线程将不再存活,因为它等待线程被执行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。