packagecom.zxd.concurrent.learning;importjava.util.concurrent.locks.ReentrantReadWriteLock;/***@authorCoderZZ
* @Title: ${FILE_NAME}
* @Project: ConcurrentLearning
* @Package com.zxd.concurrent.learning
* @description: 读锁不互斥;读写、写写互斥
* @Version 1.0
* @create 2018-04-08 21:29
**/
public classReentrantReadWriteLockTest {private ReentrantReadWriteLock reentrantReadWriteLock = newReentrantReadWriteLock();public voidread(){try{
reentrantReadWriteLock.readLock().lock();
System.out.println("获得读锁"+Thread.currentThread().getName()+" timestamp:"+System.currentTimeMillis());
Thread.sleep(10000);
}catch(InterruptedException e) {
e.printStackTrace();
}finally{
reentrantReadWriteLock.readLock().unlock();
}
}public voidwrite(){try{
reentrantReadWriteLock.writeLock().lock();
System.out.println("获得写锁"+Thread.currentThread().getName()+" timestamp:"+System.currentTimeMillis());
Thread.sleep(10000);
}catch(Exception e){
e.printStackTrace();
}finally{
reentrantReadWriteLock.writeLock().unlock();
}
}public static voidmain(String[] args){
ReentrantReadWriteLockTest reentrantReadWriteLockTest= newReentrantReadWriteLockTest();
Runnable readRunnable= newRunnable() {
@Overridepublic voidrun() {
reentrantReadWriteLockTest.read();
}
};
Thread threadA= newThread(readRunnable);
threadA.setName("A");
threadA.start();
Thread threadB= newThread(readRunnable);
threadB.setName("B");
threadB.start();
Runnable writeRunnable= newRunnable() {
@Overridepublic voidrun() {
reentrantReadWriteLockTest.write();
}
};
Thread writeA= newThread(writeRunnable);
writeA.setName("writeA");
writeA.start();
Thread writeB= newThread(writeRunnable);
writeB.setName("writeB");
writeB.start();
}
}