HashMap是线程不安全的类,HashTable线程安全,但每次操作都使用synchronized关键字,对全局加锁性能太低。 ConcurrentHashMap大量使用volatile,final,CAS等无锁技术来减少锁竞争对于性能的影响。避免了对全局加锁,使用对局部加锁,极大的提高了在并发环境下的操作速度。
java.util.concurrency.atomic.LongAdder是Java8新增的一个类,提供了原子累计值的方法。根据文档的描述其性能要优于AtomicLong,下图是一个简单的测试对比(平台:MBP): 这里测试时基于JDK1.8进行的,AtomicLong 从Java8开始针对x86平台进行了优化,使用XADD替换了CAS操作,我们知道 ...
几天前,我偶然地将之前写的用来测试AtomicInteger和synchronized的自增性能的代码跑了一下,意外地发现AtomicInteger的性能比synchronized更好了,经过一番原因查找,有了如下发现: 可以看出,在jdk1.8中,直接使用了Unsafe的getAndAddInt方法,而在jdk1.7的Unsafe中,没有此 ...
在《疫苗:Java HashMap的死循环》中,我们看到,java.util.HashMap并不能直接应用于多线程环境。对于多线程环境中应用HashMap,主要有以下几种选择: 使用线程安全的java.util.Hashtable作为替代。 使用java.util.Collections.synchronizedMap方法,将已有的HashMap对象包装为线程 ...
一些您可能无法访问的结果已被隐去。
显示无法访问的结果