首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

带你搞懂Java多线程(六)

前面介绍的都是排他锁(独占锁),下面我们来介绍以下读写锁

ReadWriteLock接口和读写锁ReentrantReadWriteLock

  • 允许同一时刻有多个线程进行访问ReentrantReadWriteLock实现了ReadWriteLock接口。
  • ReadWriteLock接口中有两把Lock锁,从而实现同一时刻只允许读线程或者写线程进行操作。
  • 通过将读写锁进行分离,从而非常多的提高性能。

使用方法如下

代码语言:javascript
复制
private final ReadWriteLock lock = new ReentrantReadWriteLock();
//拿到读锁
private final Lock getLock = lock.readLock();
//拿到写锁
private final Lock setLock = lock.writeLock();
//使用和Lock一样注意将unlock()放在finally中
getLock.lock();
try{
}finally{
  getLock.unlock();
}

在应用中,读写操作的比例大概为十比一,而且读的操作是可以同时进行,并且不允许写操作,但写操作时是不允许其他操 作的,从而保证了安全性。

Condition接口

用来实现等待通知的效果,相当于syn里的notify和notifyAll。 与syn不同用Lock和Condition实现等待通知大多数时候推荐使用signal而不是signalAll(根据业务选择选择)

举报
领券