java并发包:读写锁
来源:互联网 发布:知乎手机版怎么用 编辑:程序博客网 时间:2024/05/16 10:59
本文转载至:http://blog.csdn.net/a910626/article/details/51900954
ReadWriteLock是jdk5中提供的读写分离锁。读写分离锁可以有效的帮助减少锁竞争,以提升性能。用锁分离的机制来提升性能非常容易理解,比如线程A1,A2,A3进行写操作,B1,B2,B3进行读操作,如果使用重入锁或者内部锁,则理论上说所有读之间、读和写之间、写和写之间都是串行操作。当B1进行读取时,B2,B3则需要等待锁的释放。由于读操作并不对数据的完整性造成破坏,这种等待显然是不合理。因此,读写锁就有了发挥功能的余地。
在这种情况下,读写锁允许多个线程同时读,使得B1,B2,B3之间真正并行。但是,考虑到数据完整性,写写操作和读写操作间仍然是需要相互等待和持有锁的。总的来说,读写锁的访问约束如下:
如果在系统中,读操作次数远远大于写操作,则读写锁就可以发挥最大的功效,提升系统的性能。
一个例子
/** * Created by niehongtao on 16/7/12. * 读写锁 */public class ReadWriteLockDemo { 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); 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) { ReadWriteLockDemo demo = new ReadWriteLockDemo(); Runnable readRunnable = new Runnable() { @Override public void run() { try { demo.handleRead(readLock); } catch (InterruptedException e) { e.printStackTrace(); } } }; Runnable writeRunnalbe = new Runnable() { @Override public void run() { try { demo.handleWrite(writeLock, new Random().nextInt()); } catch (InterruptedException e) { e.printStackTrace(); } } }; for (int i = 0; i < 18; i++) { new Thread(readRunnable).start(); } for (int i = 18; i < 20; i++) { new Thread(writeRunnalbe).start(); } }}
0 0
- java并发包:读写锁
- java并发包学习系列:读写锁
- Java并发包中的读写锁及其实现分析
- Java 并发包中的读写锁及其实现分析
- Java 并发包中的读写锁及其实现分析
- Java 并发包中的读写锁及其实现分析
- Java并发包中的读写锁及其实现分析
- 深入浅出Java并发包—读写锁ReentrantReadWriteLock原理分析(二)
- 深入浅出Java并发包—读写锁ReentrantReadWriteLock原理分析(一)
- Java线程总结(八):并发包------读写锁ReadWriteLock的简单例子详细理解
- Java并发:互斥锁和读写锁
- java并发编程——读写锁
- 【Java并发】- ReentrantReadWriteLock,读写锁原理
- Java并发编程之读写锁
- java并发编程之读写锁
- Java并发编程之读写锁
- Java并发编程之读写锁
- java多线程:并发包中ReentrantReadWriteLock读写锁的锁降级模板 写锁降级为读锁
- 雅虎优化35条
- 算法
- PHP+swoole实现简单多人在线聊天群发
- Hibernate获取数据时,报java.lang.StackOverflowError错误
- ajax+servlet实现注册验证(验证用户名是否存在)
- java并发包:读写锁
- 在服务器上部署项目后新增一个访问端口,服务器本地可以访问项目,但是外网访问不了
- (三)RabbitMQ消息队列-Centos7下安装RabbitMQ3.6.1
- HTTP与HTTPS异同||HTTP1.0与HTTP1.1差别
- loadrunner11录制时events为0的解决办法
- SQL语言20170419
- xcrun: error: unable to find utility "PackageApplication", not a developer tool or in PATH
- 快速查找兄弟字符串
- mongodb的分片