一、前言
读写锁ReentrantReadWriteLock,其核心就是实现读写分离的锁,在高并发访问下,尤其是读多写少的情况下,性能要远高于重入锁。之前学synchronized、ReentrantLock时,同一时间内,只能有一个线程访问被锁定的代码,那么读写锁则不同,其本质是分成两个锁,即读锁、写锁。在读锁下,多个线程可以并发的进行访问,但是在写锁的时候,只能一个一个的顺序访问。
读读共享、写写互斥、读写互斥。
二、读读共享
public class Service {
private ReentrantReadWriteLock lock=new ReentrantReadWriteLock();
public void read(){
try {
try {
lock.readLock().lock();
System.out.println("获得读锁"+Thread.currentThread().getName()+" "+System.currentTimeMillis());
Thread.sleep(10000);
} finally{
lock.readLock().unlock();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class ThreadA extends Thread {
private Service service;
public ThreadA(Service service){
super();
this.service=service;
}