Java多线程Condition实现等待/通知

2017-01-13 15:02:04来源:csdn作者:IsResultXaL人点击

第七城市

Java多线程可以通过synchronzied与wait()和notify()/notifyAll()方法相结合可以实现等待/通知模式。 通过显式Lock和Condition也可以实现等待/通知模式。

因为在使用notify()/notifyAll()方法进行通知时,被通知的线程是由JVM随机选择的。但是通过Lock和Condition可以选择性的通知,更灵活。

在condition.await()方法调用之前需要调用lock.lock()代码获得同步锁。要不然报错

一个Condition对象实现等待/通知模式

Object类中的wait()方法等同于Condition类中的await()方法 Object类中的wait(long timeout)方法等同于Condition类中的await(long time,TimeUnit unit)方法 Object类中的notify()方法等同于Condition类中的signal()方法 Object类中的notifyAll()方法等同于Condition类中的signalAll()方法

多个Condition对象实现等待/通知模式 这个时候创建了两个Condition对象A和B,但是我只通知了A,所以awaitB()方法在打印完awaitB:开始之后进入阻塞模式。

synchronized相当于整个Lock对象只有一个单一的Condition对象,所有线程都注册在它一个对象上面。所以线程开始notifyAll()的时候会通知所有的waiting线程,没有选择权,会出现效率问题。


第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台