“锁”的竞争必然会导致程序性能急剧下降,常见的提高“锁”性能有以下一些建议。我们根据“锁”的优化来顺便学习一下并发集合(java.util.concurrent包下的部分集合类)
1.减少锁粒度
所谓减少锁粒度,就是指缩小锁定对象的范围,从而减少锁冲突的可能性,进而提高系统的并发能力。
我们来了解一下ConcurrentHashMap 类怎么实现减小锁粒度的:
通过分析Hashtable就知道,synchronized是针对整张Hash表的,即每次锁住整张表让线程独占,ConcurrentHashMap允许多个修改操作并发进行,ConcurrentHashMap 使用了多个锁来控制对hash表的不同部分进行的修改。ConcurrentHashMap内部使用段(Segment)来表示这些不同的部分,一个ConcurrentHashMap被进一步细分为16个小段,每个段其实就是一个小的hash table,它们有自己的锁。只要多个修改操作发生在不同的段上,它们就可以并发进行。
但是减少锁粒度会带来新的问题,那就是,当系统获取全局信息时,其消耗会比较多,当我们试图获取ConcurrentHashMap全局信息时&#x