线程通信:
1、 传统的线程通信
借助Object类提供的wait()、notify()、notifyAll() 3个方法 ,这3个方法由同步监视器对象来调用,可分为两种情况:
synchronized修饰同步方法,该类默认实例(this)就是同步监视器,可直接使用三个方法; synchronized 修饰同步代码块,同步监视器是synchronized(同步监视器)括号里的对象;
2、 使用Condition控制线程通信
线程使用Lock对象保证同步时,利用Condition类保持线程之间通信;
Lock替代了同步方法和同步代码块,Condition替代了同步监视器;
Condition实例被绑定在Lock对象上,要获得Lock对象的Condition实例,调用Lock对象的newCondition方法即可;
Condition类提供了3个方法:await()、signal()、signalAll()
功能与wait()、notify()、notifyAll()类似;
3、 使用阻塞队列(BlockingQueue)控制线程通信
生产者线程试图向BlockingQueue中放入元素时,若该队列已满,则该线程被阻塞
当消费者线程试图从BlockingQueue中取元素时,若队列已空,则该线程被阻塞;