谁打断了我的线程?

时间:2010-03-19 08:58:02

标签: java swing multithreading interrupt interrupted-exception

我理解InterruptedException的作用以及抛出的原因。但是在我的应用程序中,我在等待我的应用程序只知道的线程上的SwingUtilities.invokeAndWait()时得到它,而我的应用程序从不在任何线程上调用Thread.interrupt(),它也从不传递线程的引用对任何人。

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

有什么方法可以说出来吗?是否有理由说InterruptedException不包含请求中断的Thread的名称?

我读到它可能是一个框架或库来执行此操作,我们使用以下内容,但我无法想到它们中断我的线程的原因:

  • 休眠
  • 弹簧
  • Log4J的
  • Mysql连接器

3 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:4)

一般情况下,如果你想知道谁在做某事,请附上一个调试器,放一个断点,然后你去。无需猜测是否可以重现它!

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

答案 2 :(得分:2)

这里有一些奇怪的事情。

invokeAndWait的javadoc中,抛出InterruptedException

  

如果我们在等待事件调度线程完成执行doRun.run()时被打断

您是否尝试过查看EDT中执行的代码是否发送任何异常?或者在EDT中的代码尝试修改这个线程的一些变量(我知道这个术语在java语言中不是“正统的”,但我希望你明白我的意思:任何代码暗示同步,等待,加入,......

相关问题