调试Java InterruptedException,即找到原因

时间:2018-07-19 20:35:58

标签: android multithreading debugging rx-java2

在调试Android应用时,有时会发生 InterruptedException 并使应用崩溃。我已经能够在默认异常处理程序上设置断点,但是调用堆栈没有提供信息。

at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:1991)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2025)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1048)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:776)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:820)

这说明中断的线程始终是RxCachedThreadScheduler-4(或其他一些数字)

找到异常根源的系统方法是什么?

2 个答案:

答案 0 :(得分:2)

在方法Thread::interrupt处设置断点,并抓住违规者。如果您认为不应发生这种中断,并且无法关闭中断线程的调用,则可以在线程实现中重写Thread::interrupt,并通过提供自己的线程来强制线程池使用您的实现ThreadFactory

答案 1 :(得分:2)

看起来崩溃是由于第三方代码包引起的,您还应该在源项目中发布问题,以寻求更多帮助。请发布与您如何使用此软件包有关的任何代码,以帮助进行故障排除。如果他们已经解决了此问题,请确保使用的是此软件包的最新版本。堆栈跟踪不是很有用,因为另一个项目正在启动线程,并且崩溃发生在它们的一个线程内。您可能未按预期使用该软件包,或者其中存在需要修复的错误。

https://github.com/ReactiveX/RxJava
相关问题