问题描述
我在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);
,然后您的线程将不再存活,因为它等待线程被执行。