我在代码中找到可以改进并获得更好并行性的点时遇到了一些麻烦。我有一个非常繁重的任务,我正在用ExecutorService
执行多次。但是,当它变得有点重(通过修改它的参数)时,我注意到有一个问题,我的任务都在等待其中一个完成,而我期望每个任务独立于另一个。
我想知道是否有任何方法可以分析我的代码以找到我的线程等待某些资源的点,这样我就知道应该在哪里修改以提高程序的并行性能。该程序相对较大,因此分析每个控制流本身会花费相当长的时间(同时也容易出错),而我宁愿以编程方式进行。
感谢您的时间。
答案 0 :(得分:1)
最简单的方法是使用jstack进行少量线程转储,并查看大多数线程的位置。如果这还不够,运行一个分析器,最简单的可能是Visual VM CPU采样器,它会告诉你每个线程花费时间的位置,包括等待。这应该包括最常见的案例。