带你搞懂Java多线程(一)
带你搞懂Java多线程(二)
带你搞懂Java多线程(三)
带你搞懂Java多线程(四)
带你搞懂Java多线程(五)
前面介绍的都是排他锁(独占锁),下面我们来介绍以下读写锁
ReadWriteLock接口和读写锁ReentrantReadWriteLock
- 允许同一时刻有多个线程进行访问ReentrantReadWriteLock实现了ReadWriteLock接口。
- ReadWriteLock接口中有两把Lock锁,从而实现同一时刻只允许读线程或者写线程进行操作。
- 通过将读写锁进行分离,从而非常多的提高性能。
使用方法如下
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(根据业务选择选择)
网友评论