【发布时间】:2013-05-08 13:57:19
【问题描述】:
我有一个将作业分派到线程池的主线程。我正在使用 Java 的 Executor 框架。
从分析器(VirtualVM)我可以看到每个线程的活动:我可以看到主线程正在等待很多(因为执行程序的队列有上限),这意味着执行程序的队列大部分时间都是满的。然而,执行者的线程并不像我想象的那么忙。他们中的大多数人的等待时间为 75%。在 virtualVM 中,它说它在 Monitor 上等待。
谁能解释为什么会这样?为什么执行程序线程会等待,而仍有大量工作可做?以及如何提高执行器的性能?从而提高整体性能?更多关于执行者等待监视器的细节会很棒。
在worker中运行的工作只是一些计算,它不依赖于其他任何东西,也不与任何其他线程通信(没有同步),除了最后,它将数据放入数据库,使用它是自己的连接。
【问题讨论】:
-
你在做什么工作?从 Job 对象发布代码。发布关键部分代码。
-
您确定他们在等待工作吗?他们更有可能正在等待其他锁。
-
“它在 Monitor 上等待。” => 你似乎正在使用锁或同步语句,这是你的瓶颈......
-
有没有办法查看他们正在等待哪个显示器?我也怀疑是executor的内部监视器。
标签: java multithreading concurrency executorservice java.util.concurrent