减少锁的竞争
来源:互联网 发布:linux 新建一个文件 编辑:程序博客网 时间:2024/04/28 19:39
1)通过使用synchronized代码块儿代替在方法上添加synchronized来保护共享状态的方法,减小锁的范围,减少线程持有锁的时间。
2)锁的分解,例如一个类有两个共享状态,一个是人,一个是钱,分别提供两个锁,分别对应这两个共享状态,那么即可减少持有锁的频率。
3)锁的分解的进一步扩展那就是锁的分段,例如共享状态人是使用HashTable保存那么程序性能因为经常持有锁二成为性能瓶颈,使用ConcurrenthHashMap来代替Hashtable,因为ConcurrentHashMap使用的是默认16个锁类分别管理整个map的1/16的元素,那么每个线程在写入程序的时候,不需要持有整个map的锁,减少了持有锁的频率。
4)避免热点域,例如ConcurrentHashMap的size,用户保存集合的元素个数,单数看似可以O(1)操作的直接获取的操作,却因为是没有个设计修改元素个数的操作都会访问这个属性成为并发的另一个伸缩性问题,ConcurrrentHashMap通过每一个Segment维护一个count,这样在需要的时候再汇总,避免频繁访问size的问题。
5)使用ReentranReadWriteLock。
6)合理使用原理变量类。
7)合理使用volatile。
0 0
- 减少锁的竞争
- JAVA并发-减少锁的竞争
- JAVA并发-减少锁的竞争
- JAVA并发-减少锁的竞争
- 双缓冲消息队列-减少锁竞争
- 降低锁竞争 减少MySQL用户等待时间
- 降低锁竞争 减少MySQL用户等待时间
- 双缓冲消息队列-减少锁竞争
- 降低锁竞争 减少MySQL用户等待时间
- 双缓冲消息队列-减少锁竞争
- 双缓冲消息队列-减少锁竞争
- 双缓冲消息队列-减少锁竞争
- 双缓冲消息队列-减少锁竞争
- 多线程开发之减少竞争
- 文件锁的竞争
- MySQL之锁-1 降低锁竞争,减少MySQL用户等待时间
- java并发基础(七)--- 加速比、线程开销、减少锁竞争
- 多线程锁竞争造成的开销
- 欢迎使用CSDN-markdown编辑器
- 操作系统--用JavaScript实现银行家算法
- github新手指南
- 32. Longest Valid Parentheses
- HTTP Status 404 -(tomcat,springmvc,ModelAndView)
- 减少锁的竞争
- [Swift] UIButton 增大UIButton点击区域
- Objective-C笔记大全
- 洗牌
- 在CentOS配置Apache的HTTPS服务
- Google MVP Smaple 学习文章
- 2、Linux档案权限与目录配置
- Java 中的二维数组
- Leetcode题解 112. Path Sum