为什么我的 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); 然后你的线程将不再存在,因为它等待线程被执行。