gho*_*der 2 java multithreading threadpool
我是多线程的初学者,在 OCJP7 版本中遇到以下问题:
避免在提交给 Executor 或 ExecutorService 的任务(Runnable 和 Callable 实例)中使用 Object.wait、Object.notify 和 Object .notifyAll 等方法。
有人可以解释一下为什么会这样吗?
使用 an 时,Executor您不知道如何在线程上安排任务。事实上,有可能只有一个线程。
在病态的情况下,您最终会遇到这样的情况:您Object.wait()在任务中使用单线程执行器......并且没有任何东西正在运行,notify() 因为它是单线程执行器。结果你陷入了僵局。
即使有更多线程,如果相关任务恰好安排在同一个线程上,您仍然可能会陷入类似的死锁情况。
无论如何,阻塞行为意味着Object.wait()您正在停止线程,而执行器的整个想法是将尽可能多的作业分配给数量更有限的线程。这意味着,即使在最好的情况下,您也会通过阻塞整个线程以及为其调度的所有其他等待任务来显着降低吞吐量。也就是说,您不仅会阻塞执行的任务,还会wait()阻塞在同一线程上安排在其后面的任何任务,因为该任务必须等待运行,直到阻塞任务完成。
| 归档时间: |
|
| 查看次数: |
458 次 |
| 最近记录: |