我在Eclipse中使用ExecutorService
类的项目中工作。好吧,我不熟悉多线程或并发,但我面临的问题是,当我调试时,我无法通过使用步入(F5)继续下一个方法。更具体地说,我把断点放在:
pool.awaitTermination(TERMINATION_TIMEOUT, TimeUnit.DAYS);
我无法继续下去。执行被暂停,如果未经过处理(通过按下暂停按钮),它将停止到java的Unsafe.park(boolean, long)
,我无法看到代码。在那里我似乎无法继续使用取消暂停或进入。真烦人的是,我可以继续使用简历(F8),这使我进入下一个断点,就像什么也没发生一样。
如果它有任何用处,则参数似乎是TERMINATION_TIMEOUT = 100
,TimeUnit.DAYS=6
。
我看过其他帖子,我猜测会抛出异常(ThreadPoolExecutor
可能),但建议的解决方案对我不起作用或者我没有设法应用它们。
无论如何,任何想法我怎么能克服这个问题?
答案 0 :(得分:0)
为什么不在Runnable
的{{1}}个实例上设置断点,而不是在池上设置断点?
如果由于提交此类ExecutorService
的各种地方而无法做到这一点,您可以简单地编写一个Runnable包装器来包装真实任务并捕获抛出的任何异常;然后继承你用来实际运行这样一个捕获Runnable包装器的异常的Runnable
。因此,您可以获得所需的所有例外。