use*_*933 2 java multithreading notify
如何用notify和解决饥饿notifyall?
如果我们有4个线程,则等待获取对同一obj的锁,并且当前线程将调用 notify()
JVM将选择任何一个线程。调用的线程是否有可能notify()再次被JVM选择,就像调用之后一样notify(),它也在等待线程列表中。
如果一个线程的调用次数比其他线程的调用次数多,这可能会导致饥饿问题,除非有某种机制会首先选择等待时间最长的线程。
我在这里假设所有线程都具有相同的优先级。如果线程优先级不同,我认为最高优先级线程将在notify()
同样,notifyall()我认为我们不知道将选择哪个线程会出现同样的问题。
如果您关心哪个线程得到通知,则您做错了什么。无论需要执行什么通知,任何等待通知的线程都必须能够执行。如果此逻辑不适用于您的用例,则notify不适用于您的用例。
对线程公平性的担忧通常表示代码设计不良。确保您的代码仅能执行您真正希望的工作,并且在必要时首先执行最重要的工作是您的工作。您不应该期望调度程序以某种方式执行此操作。调度程序的工作是尽可能多地完成工作,以增强流程之间的优先级和公平性。程序员的工作是编写能正常工作的代码。
| 归档时间: |
|
| 查看次数: |
1616 次 |
| 最近记录: |