notify是否随机的?

Posted imaye

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了notify是否随机的?相关的知识,希望对你有一定的参考价值。

当存在多个wait的线程时,一次notify总是启动的第一个wait的线程,但notify注解不是说随机的么/
自己多次执行都是第一个wait的线程先执行???

先来看1.8java的关于notify的注解:
/**
* Wakes up a single thread that is waiting on this object‘s
* monitor. If any threads are waiting on this object, one of them
* is chosen to be awakened. The choice is arbitrary and occurs at
* the discretion of the implementation. A thread waits on an object‘s
* monitor by calling one of the @code wait methods.
  ....
此处说是arbitrary(任意) but 还有个and 然后
discretion of the implementation的谷歌翻译出来的意思"实施的自由裁量权"

技术图片

ok fine you win/

网上有些人观点是native方法可以不用去管,有个观点帮助到我“取决于厂商的具体实现”

但谷歌翻译。。。于是我去有道??给出的例句中的意思“实现做出决定时发生”,

那看来就是notify方法具体要看实现方式。继续找notify的源码,得出的结果是由hostspot虚拟机实现,

技术图片

好吧/我是小白/虚拟机的不了解/需要了解的可取查monitor的实现方式。

在HotSpot虚拟机中,monitor采用ObjectMonitor实现。

大体意思是wait后生成ObjectWaiter并保存刀wait set中,执行notify时

时从waitset中取出第一个ObjectWaiter节点,具体可查源码。

ok得出的结果notify是按顺序来执行的/但其他虚拟机呢?也就是说notify不一定是按顺序

唤醒wait的线程。

暂得出的结果如上/有问题可讨论哈/

 

以上是关于notify是否随机的?的主要内容,如果未能解决你的问题,请参考以下文章

wait和notify

帮忙解释一下java中类的notify的含义,多谢了

对象的notify方法的含义和对象锁释放的三种情况

JUC并发编程 -- 为什么需要wait/notify方法 & 原理之 wait / notify & wait() 和 notify() API介绍

Java多线程通信之wait()和notify()方法

Java并发编程原理与实战二十一:线程通信wait&notify&join