多线程可以提高工作效率,则免不了线程之间互相通信。
wait跟notify是老的方法,每个对象会有一个监视器,有一个就绪队列,一个阻塞队列。
t1、t2、t3表示三个线程,当三个线程启动了,在线程run方法中,调用了wait,就会把运行的线程放到阻塞队列,
t1 | t2 | t3 |
t2 | t3 |
那么问题来了,我不想唤醒t1,我想唤醒t3,可以吗?如果用wait\notify,很明显是做不到的。
这时候引入了condition对象,就是为了解决此问题。condition对象会跟线程绑定。当线程t1执行run方法时,调用了 condition_1.await,则t1跟
condition_1就存在了绑定关系。
t1(conditioin_1) | t2(conditioin_2) | t3(conditioin_3) |
就绪队列。