ReadWriteLock 维护了一对相关的锁,一个用于只读操作,另一个用于写入操作。只要没有 writer,读取锁可以由多个 reader 线程同时保持。写入锁是独占的。
主要方法
- readLock() // 获得读取操作的锁
- writeLock() // 获得写入操作的锁
举个栗子
public class Test3 {
public static ReadWriteLock lock=new ReentrantReadWriteLock();
private Integer height=0;
private Integer width=0;
public String getValue(){
try{
lock.readLock().lock();;
return height+":"+width;
}finally{
lock.readLock().unlock();
}
}
public void setValue(){
try{
lock.writeLock().lock();
height++;
width++;
}finally{
lock.writeLock().unlock();
}
}
public static void main(String[] args) {
final ExecutorService executor=Executors.newFixedThreadPool(10);
final CountDownLatch latch=new CountDownLatch(100);
final Test3 test=new Test3();
for(int i=0;i<100;i++){
executor.submit(new Runnable() {
public void run() {
try{
test.setValue();
}finally{
latch.countDown();
}
}
});
}
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(test.getValue());
}
}