/*ReadWriteLock 读写锁*/

private ReadWriteLock lock = new ReentrantReadWriteLock();

lock.readLock().lock();    lock.writeLock().lock();

ReadWriteLock 维护了 /*一对*/ 相关的锁,一个用于只读操作,另一个用于写入操作

只要没有writer,读取锁可以由多个 reader 线程同时保持。写入锁是独占的

ReadWriteLock 读取操作通常不会改变共享资源,但执行写入操作时,必须是独占的方式来获取锁。对于读取操作占多数的数据结构。

ReadWriteLock 能提供比独占锁更高的并发性。而对于只读的数据结构,其中包含的不变性可以完全不需要考虑加锁操作

 /*
* 1.ReadWriterLock : 读写锁
*
* 写写 /读写 需要 “互斥”
* 读读 不需要互斥
* */ public class TestReadWriteLock { public static void main(String[] args) {
//匿名内部类 使用外部的参数 需要加上 final (1.8之后就不需要了 ,但是也不能修改)
//这和外部参数的生命周期有关
final ReadWriteLockThread lt = new ReadWriteLockThread(); //创建一个 ‘写’ 线程
new Thread(new Runnable() {
@Override
public void run() {
lt.write(10);
}
},"write").start(); ////创建100个 ‘读’ 线程
for(int i = 0;i<100;i++) { new Thread(new Runnable() {
@Override
public void run() {
lt.read();
}
},"read").start();
}
}
}
class ReadWriteLockThread {
private int number = 1;
private ReadWriteLock lock = new ReentrantReadWriteLock(); public void read() {
lock.readLock().lock();
try {
System.out.println(number);
} finally {
lock.readLock().unlock();
} } public void write(int number) {
lock.writeLock().lock();
try {
System.out.println(this.number);
this.number = number;
} finally {
lock.writeLock().unlock();
}
}
}

最新文章

  1. checkbox和文本上下对齐
  2. FIO使用指南
  3. 最短路(Dijkstra) POJ 1062 昂贵的聘礼
  4. Linux命令:traceroute(windows中为tracert)
  5. c#高效的线程安全队列ConcurrentQueue&lt;T&gt;(上)
  6. Flash上传文件(结合asp.net)
  7. Hibernate的查询语言之HQL(二)——Hibernate查询的from字句
  8. [canvas]通过动态生成像素点做绚丽效果
  9. 花海漫步 NOI模拟题
  10. Java JVM 内存泄漏--全解析和处理办法 [ 转载 ]
  11. apktool给软件加注册机修改图标和文件名
  12. CUDA学习,使用shared memory实现Reverse Array
  13. C博客01——分支,顺序结构
  14. ibatis的queyrForList和queryForMap区别
  15. http协议基本原理
  16. 合成/聚合复用原则(Composite/Aggregate Reuse Principle, CARP)
  17. Jenkins参数化构建(三)之 Jenkins从文件中读取运行参数
  18. python三目运算符
  19. C Mysql API连接Mysql
  20. haproxy+keepalived配置haproxy反向代理的高可用

热门文章

  1. ES6深入浅出-2 新版函数:箭头函数 2 视频-1.视频 箭头函数
  2. Qt编写自定义控件46-树状导航栏
  3. Jmeter响应断言--正则表达式判断纯数字
  4. Java不写文件,LOAD DATA LOCAL INFILE大批量导入数据到MySQL的实现(转)
  5. 使用 ServiceStack.Text 序列化 json的实现代码
  6. 比较SSO协议: WS-Fed, SAML, and OAuth
  7. 第九章 JSP标签——《跟我学Shiro》
  8. 《CNCF &#215; Alibaba云原生技术公开课》知识点自测(三):Kubernetes核心概念
  9. MongoDB 谨防索引seek的效率问题(转)
  10. Win10利用CodeBlocks搭建Objective-C开发环境(二)