等待/唤醒机制是多线程之间进行通信(同步)的一种方式,这里对它在Java中的使用做一个总结。
Object
的wait()
和notify()
这个算是比较原始的一种等待/唤醒机制,这两个方法都是Object
类中定义的方法,也就是说每个对象都拥有这两个方法。
它们一般都是和synchronized
关键字配合使用的。
Condition
接口
Condition
接口是为了对Lock
的一个等待/通知机制的实现。这里需要提一下,Lock
接口是在synchronized
后面提出的锁机制,相比于synchronzied
关键字,它能够响应中断。而Condition
正是为Lock
中提供了等待/通知机制。
阻塞队列
阻塞队列也是一种线程间通信的方式,其核心在于两个线程互相通信去使用同一个队列,而这两个线程间的通信就是通过等待/通知机制完成的。在阻塞队列中,如果生产者线程发现当前队列满了,那么他就会调用await()
方法,挂起生产者线程。当消费者线程从队列中消费了元素后,然后通过signal()
方法唤醒生产线程。