轻松理解Java并发wait() 方法,notify() 方法和notifyAll()方法

  • Post author:
  • Post category:java


简单了解

wait

方法和

notify

方法


wait()

使得线程进入阻塞状态,它有两种形式,一种允许 指定以毫秒为单位的一段时间作为参数,另一种没有参数,前者当对应的 notify() 被调用或者超出指定时间时线程重新进入可执行状态,后者则必须对应的 notify() 被调用。

他们是

Object

类的方法,也就是说每个对象都有这一对方法,可能初看不太好理解,但是,因为每个对象都有锁,调用任意对象的

wait()

方法导致线程阻塞,并且该对象上的锁被释放。而调用任意对象的

notify()

方法则导致因调用该对象的

wait()

方法而阻塞的线程中随机选择的一个解除阻塞(但要等到获得锁后才真正可执行)。


notify()

的作用是唤醒随机一个因为这个锁

wait()

进入阻塞状态的线程(冷知识:实际上在

hotspot

虚拟机中是以先进先出的形式唤醒的),而

notifyAll()

顾名思义,就是唤醒所有被这个锁阻塞的线程.

总结一下是这样:


lock

对象维护了一个等待队列

list

线程

A

中执行

lock



wait

方法,把线程

A

保存到list中;

线程

B

中执行

lock



notify

方法,从等待队列中取出线程

A



版权声明:本文为java111112313213原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。