内容:读锁时共享的。写锁时相互排斥的(可见执行结果)。都是通过AQS实现的。

public class ReentrantReadWriteLockTest {

	static class MyObject {
private Object object;
private ReadWriteLock lock = new ReentrantReadWriteLock(); public void get() {
lock.readLock().lock();
System.out.println(Thread.currentThread().getName() + "准备读数据!!"); try {
Thread.sleep(new Random().nextInt(1000));
System.out.println(Thread.currentThread().getName() + "读数据为:" + this.object);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.readLock().unlock();
}
} public void put(Object object) {
lock.writeLock().lock();
System.out.println(Thread.currentThread().getName() + "准备写数据"); try {
Thread.sleep(new Random().nextInt(1000));
this.object = object;
System.out.println(Thread.currentThread().getName() + "写数据为" + this.object);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.writeLock().unlock();
}
}
} public static void main(String[] args) throws InterruptedException {
final MyObject myObject = new MyObject();
ExecutorService executor = Executors.newCachedThreadPool(); for (int i = 0; i < 3; i++) {
executor.execute(new Runnable() { @Override
public void run() {
for (int j = 0; j < 5; j++)
myObject.put(new Random().nextInt(1000));
}
});
} for (int i = 0; i < 3; i++) {
executor.execute(new Runnable() { @Override
public void run() {
for (int j = 0; j < 5; j++)
myObject.get();
}
});
} executor.shutdown();
} }

执行结果:

最新文章

  1. 剑指offer 复制构造函数
  2. d3 scale 学习笔记
  3. sql之多表连接
  4. [转]Java连接各种数据库的方法
  5. 蜥蜴(bzoj 1066)
  6. UWP开发入门(十五)——在FlipView中通过手势操作图片
  7. 增量升级(省流量更新)的Android客户端实现
  8. You must supply a layout_width attribute的错误原因及解决办法
  9. 划分树 静态第k大
  10. json字符串中key值下划线命名转换为驼峰命名
  11. USACO2004 Open提交作业(区间DP)
  12. rabbitmq 3.7.8基于centos7部署文档
  13. Unity3d自制字体
  14. 自适应电脑、手机和iPad的网页设计方法
  15. 在见证了1000多家公司的兴衰灭亡之后,YC创始合伙人总结了创业公司的6个不死法则(转)
  16. joomla 的语言翻译
  17. UI5-学习篇-15-云连接SAP Cloud Connector
  18. IQueryable与IEnumerable
  19. es6学习笔记10--箭头函数
  20. 吴恩达-coursera-机器学习-week10

热门文章

  1. ssh服务介绍
  2. apidoc利用代码注释书写文档
  3. js实现复制粘贴功能
  4. day15-python之变量和递归
  5. post processing in CFD
  6. netcore使用AutoMapper
  7. 【转】错误: ORA-01591: 锁被未决分布式事务处理 7.2.428982 持有--解决方案
  8. luogu3415 祭坛
  9. CodeForces 22、23部分题解
  10. POJ-2387Til the Cows Come Home,最短路坑题,dijkstra+队列优化