- ReadWriteLock:
ReadWriteLock是一个接口,在它里面只定义了两个方法:
public interface ReadWriteLock {
Lock readLock();
Lock writeLock();
}
readLock()用来获得读锁,writeLock()用来获取写锁。
- ReentrantReadWriteLock
ReentrantReadWriteLock是ReadWriteLock接口的唯一实现,其中最主要的两个方法就是readLock()和writeLock()
- ReentrantReadWriteLock作用:
支持多个读线程进行并发操作,但每次只允许一个写线程,可以将写锁理解为独占锁,每次只允许一个线程获得锁。并且进行读-写操作,写-写操作不能同时进行。
- 一个简单例子
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* Created by I am master on 2017/10/3.
*/
public class TestReentrantReadWriteLock {
private ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
private Lock lock = rwl.readLock();
public static void main(String[] args) {
final TestReentrantReadWriteLock test = new TestReentrantReadWriteLock();
new Thread(){
public void run() {
test.get(Thread.currentThread());
}
}.start();
new Thread(){
public void run() {
test.get(Thread.currentThread());
}
}.start();
}
public void get(Thread thread) {
rwl.readLock().lock();
try {
long start = System.currentTimeMillis();
while(System.currentTimeMillis() - start <= 1) {
System.out.println(thread.getName()+"正在进行读操作");
}
System.out.println(thread.getName()+"读操作完毕");
} finally {
rwl.readLock().unlock();
}
}
}
运行结果的一部分:
Thread-0正在进行读操作
Thread-0正在进行读操作
Thread-0正在进行读操作
Thread-0正在进行读操作
Thread-0正在进行读操作
Thread-0正在进行读操作
Thread-0正在进行读操作
Thread-0正在进行读操作
Thread-0正在进行读操作
Thread-1正在进行读操作
Thread-0正在进行读操作
说明两个线程在同时进行读操作