无锁HashMap的原理与实现
来源:互联网 发布:淘宝卖家账号出售价格 编辑:程序博客网 时间:2024/06/06 10:54
在《疫苗:Java HashMap的死循环》中,我们看到,java.util.HashMap并不能直接应用于多线程环境。对于多线程环境中应用HashMap,主要有以下几种选择:
- 使用java.util.Collections.synchronizedMap方法,将已有的HashMap对象包装为线程安全的。
- 使用java.util.concurrent.ConcurrentHashMap类作为替代,它具有非常好的性能。
而以上几种方法在实现的具体细节上,都或多或少地用到了互斥锁。互斥锁会造成线程阻塞,降低运行效率,并有可能产生死锁、优先级翻转等一系列问题。
CAS(Compare And Swap)是一种底层硬件提供的功能,它可以将判断并更改一个值的操作原子化。关于CAS的一些应用,《无锁队列的实现》一文中有很详细的介绍。
Java中的原子操作
在java.util.concurrent.atomic包中,Java为我们提供了很多方便的原子类型,它们底层完全基于CAS操作。
例如我们希望实现一个全局公用的计数器,那么可以:
1
2
3
4
5
6
7
8
9
10
private
AtomicInteger counter =
new</…………………………………………………………………………
转载:http://www.verydemo.com/demo_c89_i222365.html
0 0
- 无锁HashMap的原理与实现
- 无锁HashMap的原理与实现
- 无锁HashMap的原理与实现
- 无锁HashMap的原理与实现
- 无锁HashMap的原理与实现
- 无锁HashMap的原理与实现
- 无锁HashMap的原理与实现
- 无锁HashMap的原理与实现
- 无锁队列的原理与实现
- HashMap的设计原理与实现分析
- HashMap的实现原理
- HashMap的实现原理
- hashMap的实现原理
- HashMap的实现原理
- HashMap的实现原理
- HashMap的实现原理
- HashMap的实现原理
- HashMap的实现原理
- Flex 复杂XML 解析XML
- Unix下配置Scheduler的过程和出现的NQSError问题
- bmp 转 dxf
- 【Python】删除和拷贝文件
- 黑马程序员_java高新(二)_反射
- 无锁HashMap的原理与实现
- HTTP状态码返回值说明
- C语言中的字节对齐
- CentOS-6.3安装配置SVN
- 第一个OpenGL ES三角形
- 黑马程序员_java高新(三)_内省、泛型、注解
- matplotlib 使用时遇到的错误:ImportError: No module named six
- 小城故事多
- C#使用Panel实现窗体动态侧边栏