Java 谁打断了我的话?
我理解InterruptedException的作用以及抛出它的原因。然而,在我的应用程序中,当我在一个只有我的应用程序知道的线程上等待Java 谁打断了我的话?,java,multithreading,swing,interrupted-exception,Java,Multithreading,Swing,Interrupted Exception,我理解InterruptedException的作用以及抛出它的原因。然而,在我的应用程序中,当我在一个只有我的应用程序知道的线程上等待SwingUtilities.invokeAndWait()时,我得到了它,并且我的应用程序从未在任何线程上调用thread.interrupt(),它也从未将线程的引用传递给任何人 所以我的问题是:谁打断了我的线程 有什么办法可以说吗?InterruptedException不包含请求中断的线程的名称有什么原因吗 我读到它可以是一个框架或库来实现这一点,我们使
SwingUtilities.invokeAndWait()
时,我得到了它,并且我的应用程序从未在任何线程上调用thread.interrupt()
,它也从未将线程的引用传递给任何人
所以我的问题是:谁打断了我的线程
有什么办法可以说吗?InterruptedException不包含请求中断的线程的名称有什么原因吗
我读到它可以是一个框架或库来实现这一点,我们使用以下方法,但我想不出它们中断我的线程的原因:
- 冬眠
- 弹簧
- Log4J
- Mysql连接器
- 这里有些奇怪
从的javadoc中,抛出一个
中断异常
如果我们在等待事件调度线程完成执行doRun.run()时被中断
您是否尝试过查看EDT中执行的代码是否发送任何异常?或者EDT中的代码试图修改这个线程的一些变量(我知道这个术语不是“正统的”)在java语言中,但我希望你明白我的意思:任何暗示同步、等待、加入的代码,一般来说,如果你想知道谁在做什么,附加一个调试器,放置一个断点,然后就可以了。无需猜测是否可以复制它
在这种情况下,您可以在
Thread.interrupt()
处设置断点。如果有其他线程也被中断(因此您在断点上有“假阳性”点击),您可以添加断点条件(大多数IDE都允许您轻松地这样做),例如,通过检查线程的名称。如果可能,您可以扩展线程
并覆盖该线程的中断()
方法,以打印堆栈跟踪或引发不受支持的操作异常
您还可以使用扩展的
Thread
类来存储对中断线程的引用,并在捕获到中断的异常后读取它。我想您的意思是“谁敢中断我的线程?”+1-您正在执行线程#连接?它抛出中断的异常。实际上,Scott,我更希望我的线程不可中断(因为我无论如何都不想遵从请求)。我们不执行线程连接,但我可以想象invokeAndWait使用了这样一种机制。然而,Thead#join会在另一个线程上调用中断吗?而且我非常确定没有人会等待我的线程完成(因为它永远不会完成)。Thread.dumpStacktrace()没有帮助???当前线程不是执行中断的线程,因此dumpStackTrace不应该提供我需要的信息。异常的stacktrace显示它发生在Object.wait()中如果我们正在等待的Runnable抛出异常,它应该给出一个InvocationTargetException,事实并非如此。我们的线程在等待时可能有一个锁,这会导致它吗?我确信我们没有死锁。我们等待的线程创建了一个我们在等待线程中使用的对话框。