博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程并发库
阅读量:4588 次
发布时间:2019-06-09

本文共 1067 字,大约阅读时间需要 3 分钟。

x.ThreadLocal单个线程范围内的共享变量

应用比如,struts的Action对象的共享变量request,session...等等。

巧妙的单例设计ThreadLocal线程共享变量对象ThreadLocalDto

12.读写锁

a.读写锁可以实现读读同步,读写互斥,写写互斥。

应用比如,队列Queue中的一份数据data,多个线程同时读和写。

b.基于多线程的并发缓存系统

1 public class CacheDemo{ 2 private HashMap
cache=new HashMap
(); 3 private ReadWriteLock rwl=new ReenTrantReadWriteLock(); 4 public Object getData(String key){ 5 rwl.readLock().lock(); 6 Object value=null; 7 try{ 8 value=cache.get(key); 9 if(value==null){ 10 rwl.readLock().unlock(); 11 rwl.writeLock().lock(); 12 try{ 13 // 14 if(value==null){ 15 value=userSql.query(key); 16 cache.put(key,value); 17 } 18 }finally{ 19 rwl.writeLock().lock(); 20 } 21 rwl.readLock().lock(); 22 } 23 }finally{ 24 rwl.readLock().unlock(); 25 } 26 return value; 27 } 28 }
View Code

 13.condition可以实现多路通信,多路的指定叫醒,比如老大叫醒老二,老二叫醒老三,老三叫醒老大。wait()和notify()和while无法实现两路以上指定叫醒。

a.高级应用,阻塞队列。多(单)个线程put(),多(单)个线程take()(需要两路的指定叫醒,可以用一个condition实现或者wait,notify实现,此处用的是两个condition,可以减少唤醒消耗(需要唤醒的wait池对象相对大大减少))。

转载于:https://www.cnblogs.com/kuiyeit/p/5848592.html

你可能感兴趣的文章
[编写高质量代码:改善java程序的151个建议]建议62 警惕数组的浅拷贝
查看>>
h5移动端适配iOS遇到的问题
查看>>
20. 最长公共子串(ToDo)[LCS]
查看>>
浮动:图解两栏布局
查看>>
CSS3 box-sizing 属性
查看>>
expect用法
查看>>
JavaScript [ 转 ] —— 面向对象编程(二):构造函数的继承
查看>>
$百度应用引擎BAE的使用与应用部署
查看>>
Keras入门——(6)长短期记忆网络LSTM(三)
查看>>
高效算法的常用技术(算法导论)
查看>>
TCP、UDP套接字网络协议
查看>>
STDIN_FILENO与stdin区别(转)
查看>>
页面操作postback后保持滚动条位置
查看>>
nginx动静分离小示例
查看>>
nginx socket转发设置
查看>>
centos samba搭建
查看>>
Android Studio 错误: 非法字符: '\ufeff'
查看>>
并发编程--一堆锁,GIL,同步异步,Event事件
查看>>
svn配置
查看>>
解决SQLite database is locked
查看>>