notifyAll()方法按照后进先出算法唤醒所有wait状态的线程,即LIFO。
执行完唤醒方法,并不会立即唤醒等待线程,在hotspot中是退出同步块的时候才会去真正唤醒对应的线程。
notifyAll()唤醒过程还使用了monitorexit,当某个线程从wait状态恢复时,要先获取锁,然后再退出同步块,并唤醒最后一个进入wait状态的线程,依次类推。
这些策略都可以通过修改JVM参数来改变。
执行完唤醒方法,并不会立即唤醒等待线程,在hotspot中是退出同步块的时候才会去真正唤醒对应的线程。
notifyAll()唤醒过程还使用了monitorexit,当某个线程从wait状态恢复时,要先获取锁,然后再退出同步块,并唤醒最后一个进入wait状态的线程,依次类推。
这些策略都可以通过修改JVM参数来改变。