package com.huang.test.concurrent;
import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* readwritelock :
* 读写、写写同时存在才会阻塞, 读读不会阻塞
*/
public class ReadWriteLockTest {
ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
private void test()
{
testRead();
}
private void testRead() {
Thread th1 = new Thread()
{
@Override
public void run() {
super.run();
reading("th1");
}
};
Thread th2 = new Thread()
{
@Override
public void run() {
super.run();
reading("th2");
}
};
Thread th3 = new Thread()
{
@Override
public void run() {
super.run();
writing("th3");
}
};
th3.start();
th1.start();
th2.start();
}
private void reading(String name) {
ReentrantReadWriteLock.ReadLock readLock = null;
try {
readLock = lock.readLock();
readLock.lock();
System.out.println(name + " read start...");
Thread.sleep(5000);
System.out.println(name + " read end...");
}catch (InterruptedException e) {
e.printStackTrace();
}finally {
readLock.unlock();
}
}
private void writing(String name)
{
ReentrantReadWriteLock.WriteLock writeLock = null;
try {
writeLock = lock.writeLock();
writeLock.lock();
System.out.println(name + " write start...");
Thread.sleep(5000);
System.out.println(name + " write end...");
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
writeLock.unlock();
}
}
public static void main(String[] args) {
ReadWriteLockTest rwTest = new ReadWriteLockTest();
rwTest.test();
}
}