谁打断了我的线程?

我理解中断异常的作用以及为什么会抛出它。但是,在我的应用程序中,当等待只有我的应用程序知道的线程时,我会得到它,并且我的应用程序从不调用任何线程,它也从不将线程的引用传递给任何人。SwingUtilities.invokeAndWait()Thread.interrupt()

所以我的问题是:谁打断了我的线程?

有什么办法可以分辨吗?中断异常不包含请求中断的线程的名称,这是有原因的吗?

我读到它可能是一个框架或库来做到这一点,我们使用以下内容,但我想不出它们中断我的线程的原因:

  • 冬眠
  • 春天
  • 日志4J
  • Mysql connector

答案 1

如果可能,可以扩展并覆盖此线程的方法,以打印堆栈跟踪或引发不受支持的操作异常。Threadinterrupt()

还可以使用扩展类来存储对中断线程的引用,并在捕获中断异常后读取它。Thread


答案 2

通常,如果你想知道谁在做某事,请附加一个调试器,放一个断点,然后你就可以了。无需猜测是否可以复制它!

在这种情况下,可以在 处放置断点。如果还有其他线程也被中断(因此断点上有“误报”命中),则可以添加断点条件(大多数IDE都允许您轻松执行此操作),例如通过检查线程的名称。Thread.interrupt()