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