gpt4 book ai didi

java - 不建议在 ExecutorService 中使用 wait(),notify() 方法

转载 作者:行者123 更新时间:2023-11-29 08:24:19 25 4
gpt4 key购买 nike

我是多线程的初学者,在 OCJP7 版本中遇到了以下问题:

Avoid using methods such as Object.wait, Object.notify, and Object .notifyAll in tasks (Runnable and Callable instances) that are submitted to an Executor or ExecutorService.

谁能解释一下为什么会这样?

最佳答案

使用 Executor,您不知道任务是如何在线程上安排的。实际上,可能只有一个线程。

在病态情况下,您最终会遇到这样一种情况,即您在任务中的单线程执行程序上 Object.wait()...并且没有任何内容被运行到 notify( ) 因为它是一个单线程执行器。结果你陷入了僵局。

即使有更多线程,如果相关任务恰好安排在同一个线程上,您仍然可能会陷入类似的死锁情况。

在任何情况下,Object.wait() 的阻塞行为意味着您正在拖延一个线程,而执行程序的整个想法是将尽可能多的作业分包给更多的作业线程数有限。这意味着即使最好的情况下,您也会通过阻塞整个线程为它安排的所有其他等待任务来显着降低吞吐量。 IE。您不仅阻塞了执行 wait() 的任务,您还阻塞了在同一线程上安排在它后面的任何任务,因为该任务必须等待运行,直到您的阻塞任务完成。

关于java - 不建议在 ExecutorService 中使用 wait(),notify() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54605463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com