通知后跟另一个通知

Joa*_*axe 2 java multithreading locking notify

如果您通知锁定并立即再次通知该锁定会发生什么?假设有2个或更多线程在等待该锁.是否可以保证两个线程被唤醒?或者是否可能只唤醒一个线程,这意味着第二个通知已经过时了?

lock.notify();
lock.notify();
Run Code Online (Sandbox Code Playgroud)

谢谢!

Gra*_*ray 5

假设有2个或更多线程在等待该锁.是否可以保证两个线程被唤醒?

是.每个通知从等待队列中获取一个线程并将其放入阻塞队列 - 唤醒线程必须首先访问synchronized有问题的锁.如果只有一个线程等待锁定,则第二个线程notify()将不执行任何操作.

重要的是要意识到线程不会立即开始执行.因为它必须在一个synchronizedlock中才能够执行wait()它必须lock在它运行之前再次访问它.块队列中可能还有多个其他线程,等待访问lock.