ReentrantReadWriteLock分为读和写锁:
读与读锁不阻塞;
读与写锁阻塞;
写与写锁阻塞;
package com.lxht.test;

import java.util.concurrent.locks.ReentrantReadWriteLock;


/**
* 测试ReentrantReadWriteLock
*/
public class TestReenTrantWriteReadLock {
public static void main(String[] args) {
ReentrantReadWriteLock readLock = new ReentrantReadWriteLock();
WriteThread thread1 = new WriteThread(readLock);
WriteThread thread4 = new WriteThread(readLock);
Thread thread2 = new ReadThread(readLock);
Thread thread3 = new ReadThread(readLock);
thread1.start();
thread2.start();
thread3.start();
thread4.start();
}
}

/**
* 读线程
*/
class ReadThread extends Thread {
private ReentrantReadWriteLock readLock;

public ReadThread(ReentrantReadWriteLock readLock) {
this.readLock = readLock;
}

public void run() {
readLock.readLock().lock();
for (int i = 0; i < 10; i++) {
System.out.println(this.getName() + ";i =" + i);
}
readLock.readLock().unlock();
}
}

/**
* 写线程
*/
class WriteThread extends Thread {
private ReentrantReadWriteLock readLock;

public WriteThread(ReentrantReadWriteLock readLock) {
this.readLock = readLock;
}

public void run() {
readLock.writeLock().lock();
for (int i = 0; i < 10; i++) {
System.out.println(this.getName() + ";i =" + i);
}
readLock.writeLock().unlock();
}
}