JDK并发包---(8)ReadWriteLock读写锁:替换ReentrantLock,提高性能
2017-01-05 16:27
337 查看
import java.util.Date; import java.util.Random; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantReadWriteLock; import javax.annotation.PreDestroy; public class ReadWriteLockDemo { private static Lock lock = new ReentrantLock(); private static ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(); private static Lock readLock = reentrantReadWriteLock.readLock(); private static Lock writeLock = reentrantReadWriteLock.writeLock(); private int value; public Object handleRead(Lock lock) throws InterruptedException { try { lock.lock(); // 模拟读操作 Thread.sleep(1000); // 读操作的耗时越多,ReadWriteLock的优势就越明显 return value; } finally { lock.unlock(); } } public void handleWrite(Lock lock, int index) throws InterruptedException { try { lock.lock(); // 模拟写操作 Thread.sleep(1000); value = index; } finally { lock.unlock(); } } public static void main(String args[]) { final ReadWriteLockDemo demo = new ReadWriteLockDemo(); Runnable readRunnable = new Runnable() { @Override public void run() { try { demo.handleRead(readLock); // demo.handleRead(lock); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Read Thread End " + Thread.currentThread().getName() + ":" + new Date()); } }; Runnable writeRunnable = new Runnable() { @Override public void run() { try { demo.handleWrite(writeLock, new Random().nextInt()); // demo.handleWrite(lock, new Random().nextInt()); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Write Thread End " + Thread.currentThread().getName() + ":" + new Date()); } }; System.out.println("Starting:" + new Date()); for (int i = 0; i < 18; i++) { new Thread(readRunnable).start(); } for (int i = 18; i < 20; i++) { new Thread(writeRunnable).start(); } } }
相关文章推荐
- JDK并发包---(6)重入锁ReentrantLock搭档:Condition条件
- JDK 5.0 Concurrency Utilities 并发处理(1)ReentrantLock 可重入锁
- JDK 5.0 Concurrency Utilities 并发处理 ReentrantLock 可重入锁
- 对于Synchronized、ReentrantLock、Atomic、CAS在并发下面的性能比较测试
- Java高并发程序-Chapter3 JDK并发包(第九讲)同步控制之 ReentrantLock 重用锁
- jdk源码解读-并发包-Lock-ReentrantReadWriteLock(1)-整体介绍以及读锁的lock 和 unlock 解析
- Android并发编程之如何使用ReentrantReadWriteLock替代synchronized来提高程序的效率
- JDK并发包---(1)重入锁ReentrantLock:基本使用
- java高并发程序设计总结三:JDK并发包之ReentrantLock重入锁
- Java高并发程序-Chapter3 JDK并发包(第十七讲)同步控制之ReentrantLock 的实现
- JDK并发包---(2)重入锁ReentrantLock:中断响应
- JDK并发包---(3)重入锁ReentrantLock:锁申请等待限时
- JDK并发包---(4)重入锁ReentrantLock:锁申请无限等待且不会产生死锁
- JDK并发包---(5)重入锁ReentrantLock:公平锁
- jdk源码解读-并发包-Lock-ReentrantLock(1)--lock()与unlock()方法走读
- Android并发编程之如何使用ReentrantReadWriteLock替代synchronized来提高程序的效率
- 并发编程--读写锁ReadWriteLock和ReentrantReadWriteLock(一)
- MySQL性能优化之一:提高MySQL并发能力的思路
- Java并发基础框架AbstractQueuedSynchronizer初探(ReentrantLock的实现分析)
- 各种同步方法性能比较(synchronized,ReentrantLock,Atomic)