1. // read and write lock is mutual exclusion lock
  2. //Listing 7-3. Using ReadWriteLock to Satisfy a Dictionary Application’s Reader and
  3. //Writer Threads
  4. import java.util.HashMap;
  5. import java.util.Map;
  6. import java.util.concurrent.Executors;
  7. import java.util.concurrent.ExecutorService;
  8. import java.util.concurrent.locks.Lock;
  9. import java.util.concurrent.locks.ReadWriteLock;
  10. import java.util.concurrent.locks.ReentrantReadWriteLock;
  11. public class A
  12. {
  13. public static void main(String[] args)
  14. {
  15. final String[] words =
  16. {
  17. "hypocalcemia",
  18. "prolixity",
  19. "assiduous",
  20. "indefatigable",
  21. "castellan"
  22. };
  23. final String[] definitions =
  24. {
  25. "a deficiency of calcium in the blood",
  26. "unduly prolonged or drawn out",
  27. "showing great care, attention, and effort",
  28. "able to work or continue for a lengthy time without tiring",
  29. "the govenor or warden of a castle or fort"
  30. };
  31.  
  32. final Map<String, String> dictionary = new HashMap<String, String>();
  33. ReadWriteLock rwl = new ReentrantReadWriteLock(true);
  34. final Lock rlock = rwl.readLock();
  35. final Lock wlock = rwl.writeLock();
  36. Runnable writer = () ->
  37. {
  38. for (int i = ; i < words.length; i++)
  39. {
  40. wlock.lock();
  41. try
  42. {
  43. dictionary.put(words[i],definitions[i]);
  44. System.out.println("writer storing " +words[i] + " entry");
  45. }
  46. finally
  47. {
  48. wlock.unlock();
  49. }
  50.  
  51. try
  52. {
  53. Thread.sleep();
  54. }
  55. catch (InterruptedException ie)
  56. {
  57. System.err.println("writer " +
  58. "interrupted");
  59. }
  60. }
  61. };
  62.  
  63. ExecutorService es = Executors.newFixedThreadPool();
  64. es.submit(writer);
  65.  
  66. Runnable reader = () ->
  67. {
  68. while (true)
  69. {
  70. rlock.lock();
  71. try
  72. {
  73. int i = (int) (Math.random() * words.length);
  74. System.out.println("reader accessing " + words[i] + ": " +dictionary.get(words[i])
  75. + " entry");
  76. }
  77. finally
  78. {
  79. rlock.unlock();
  80. }
  81. }
  82. };
  83.  
  84. es = Executors.newFixedThreadPool();
  85. es.submit(reader);
  86. }
  87. }

java ReentrantReadWriteLock的更多相关文章

  1. 收藏的技术文章链接(ubuntu,python,android等)

    我的收藏 他山之石,可以攻玉 转载请注明出处:https://ahangchen.gitbooks.io/windy-afternoon/content/ 开发过程中收藏在Chrome书签栏里的技术文 ...

  2. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  3. 【Java并发编程实战】-----“J.U.C”:ReentrantReadWriteLock

    ReentrantLock实现了标准的互斥操作,也就是说在某一时刻只有有一个线程持有锁.ReentrantLock采用这种独占的保守锁直接,在一定程度上减低了吞吐量.在这种情况下任何的"读/ ...

  4. Java多线程系列--“JUC锁”08之 共享锁和ReentrantReadWriteLock

    概要 Java的JUC(java.util.concurrent)包中的锁包括"独占锁"和"共享锁".在“Java多线程系列--“JUC锁”02之 互斥锁Ree ...

  5. Java Lock ReentrantLock ReentrantReadWriteLock

    Lock与Synchronized的区别:   1)Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现: 2)synchronized在发生异 ...

  6. Java多线程(五) Lock接口,ReentranctLock,ReentrantReadWriteLock

    在JDK5里面,提供了一个Lock接口.该接口通过底层框架的形式为设计更面向对象.可更加细粒度控制线程代码.更灵活控制线程通信提供了基础.实现Lock接口且使用得比较多的是可重入锁(Reentrant ...

  7. java中ReentrantReadWriteLock读写锁的使用

    Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象.两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象. 读写锁:分为读 ...

  8. java多线程:ReentrantReadWriteLock读写锁使用

    Lock比传统的线程模型synchronized更多的面向对象的方式.锁和生活似,应该是一个对象.两个线程运行的代码片段要实现同步相互排斥的效果.它们必须用同一个Lock对象. 读写锁:分为读锁和写锁 ...

  9. 聊聊高并发(二十九)解析java.util.concurrent各个组件(十一) 再看看ReentrantReadWriteLock可重入读-写锁

    上一篇聊聊高并发(二十八)解析java.util.concurrent各个组件(十) 理解ReentrantReadWriteLock可重入读-写锁 讲了可重入读写锁的基本情况和基本的方法,显示了怎样 ...

随机推荐

  1. loj 1034(最小点基)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25911 思路:强连通缩点,在新图中找入度为0的点的个数即可. #i ...

  2. chche缓存

    打开一张图片,先从缓存中找,如果没有,再去sccard中找,如果还没有,就去网络下载.下载好了以后,先保存到sdcard中,再保存到缓存中 public class ImageAsyncTask ex ...

  3. Android,visibility属性

    Android,visibility属性 1) 可见(visible)XML文件:android:visibility="visible"Java代码:view.setVisibi ...

  4. EntityFramework 6.0< Code First > 连接 Mysql数据库

    网上有很多关于用EntityFrame来连接Mysql数据库的教程,可是很多并不靠谱,转载的太多了.找了很久,总算是配置好了,现在分享一下. 一,安装:     1.开发环境: VS2013与EF6 ...

  5. flst与fitem命令是这么用的

    k,94,75.69947,44.09817,-40 k,95,50.9349,44.01963,-40 k,96,37.83799,45.04814,-40 k,97,15.1304,48.2934 ...

  6. extjs 选项卡

    yufenghou extjs 选项卡 <%@ page language="java" import="java.util.*" pageEncodin ...

  7. XCOJ 1102 (树形DP+背包)

    题目链接: http://xcacm.hfut.edu.cn/oj/problem.php?id=1102 题目大意:树上取点.父亲出现了,其儿子包括孙子...都不能出现.给定预算,问最大值. 解题思 ...

  8. BestCoder Round #72

    由于第一次打,只能在div2打.(这么好的机会还没AK真是丢人) T1 Clarke and chemistry 枚举题不解释(我不会告诉你我上来WA了四发的) T2 Clarke and point ...

  9. Mysql 学习

    一.ubuntu下mysql的安装: 通过sudo apt-get install mysql-server 完成: 然后可以通过/etc/init.d/mysql 进行start/stop/rest ...

  10. Ubuntu SSH root user cannot login

    Open /etc/ssh/sshd_config and check if PermitRootLogin is set to yes. If not, then set it to yes and ...