试图理解我的应用程序挂起,一切运行良好然后挂起。然后我附加了 Yourkit Profiler,它突出显示了一段时间未更改并且似乎已挂起的两个线程。
有趣的是,两个线程都在执行相同的任务,但处理不同的数据,但是该方法只是一个 CPU 密集型任务,它不共享数据、执行 I/O 或连接到其他任何东西。
public int[][] computeAssignments(float[][] matrix)
所以考虑到这一点,我无法理解是什么导致他们停下来
两个线程都作为 ExecutorService 的一部分运行
我应该采取什么方法来解决这个问题。
更新
正如 Glen 猜测的那样,这个问题与线程完全无关。只是他们碰巧遇到了同样的问题,如果提供了一组特定的数据,他们调用的代码可能会进入递归循环。另一个发帖人给出的一个很好的提示是在分析器中检查线程是否处于可运行或等待状态,只有当它们处于等待状态时,它们才会真正死锁。