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();
}
}
Java并发编程:ReentrantReadWriteLock实战
本文展示了如何在Java中使用ReentrantReadWriteLock进行读写操作。代码实例演示了读锁和写锁的使用,说明了读锁不互斥,而读写、写写操作是互斥的。通过多线程模拟读写任务,强调了锁在并发控制中的作用。
1190

被折叠的 条评论
为什么被折叠?



