【发布时间】:2021-01-08 17:36:28
【问题描述】:
我在 AEM 中有一个名为“helper”的 Java 类,sn-p 如下所示:
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? documentation 只表示“将设置此线程的中断状态。” 由线程的run()方法来查询线程的状态并采取相应措施。如果没有做这样的检查,中断Thread不会有任何效果。 -
方法
Thread#interrupt不会“停止”或“杀死”线程。此方法设置Thread的标志,线程可以检查该标志以采取相应的行动。如果线程在调用时被阻塞,它也会抛出一个InterruptedException。
标签: java multithreading thread-safety aem