一、传统线程通信synchronized + wait + notify
Object类的wait()、notify() 、notifyAll()三个方法必须由同步监视器对象来调用,分两种情况:
a)同步方法,该类默认实例(this)就是同步监视器,可以在同步方法中可以直接调用
b)同步代码块,同步监视器是synchronized后括号里的对象,所以必须使用此对象调用这三个方法
二、使用Condition控制线程通信lock + condition + await + signal
Lock代替同步方法或同步代码块,Condition替代同步监视器的功能。
private final Lock lock = newReentrantLock();
private final Condition con =lock.newCondition();
lock.lock(); con.await(); con.signalAll(); lock.unlock():
三、使用阻塞队列(BlockingQueue)控制线程通信
BlockingQueue接口主要作为线程同步的工具。当生产者试图向BlockingQueue中放入元素,如果队列已满,则线程被阻塞;当消费者试图向BlockingQueue中取出元素时,若该队列已空,则线程被阻塞。