线程中的通知

时间:2013-11-17 17:18:14

标签: java multithreading notifications

一旦调用notify()方法,线程会立即放弃监视器,就像在wait()中一样。或者,当调用notify()时,将在方法执行完成后释放监视器。

调用notify()时线程将进入哪个状态。等待或阻止状态?

2 个答案:

答案 0 :(得分:0)

拥有监视器的线程将在notify()的情况下继续保持监视器。

notify() / notifyAll()只是通知等待线程他们可以再次获得锁定。一旦线程获得监视器,它将退出wait()方法并继续。

总结:一旦锁定自然释放(在同步块/方法之外),涉及notify() / notifyAll()的线程将保持RUNNING状态。

通知的目的只是在等待线程获得锁定后立即授权等待线程获得锁定。

答案 1 :(得分:0)

只要对象上的 synchronized ,线程就会保存对象的监视器。通知的线程将移至BLOCKED状态,并且一旦拥有的线程通过保留以前保留监视器的同步块/方法,就会获得监视器

例如,如果线程A在对lock.wait()的调用中阻塞而线程B调用lock.notify(),则线程A将离开WAITING状态并进入BLOCKING状态**,但是线程A不会继续执行(即进入RUNNABLE状态),直到线程B离开synchronized的{​​{1}}块。

  

**假设没有其他线程等待lock,因为订单无法保证通知线程,这就是为什么你应该使用lock作为规则(除非你知道你在做什么,并且有充分的理由不这样做。)

使用代码:

notifyAll()