ConcurrentHashMap

来源:互联网 发布:asp读取excel数据 编辑:程序博客网 时间:2024/06/08 13:15

ConcurrentHashMap 也是一个基于散列的Map ,但它使用了一种完全不同的加锁策略来提供更高的并发性和伸缩性。

ConcurrentHashMap 并不是将每个方法都在同一个锁上同步并使得每次只能有一个线程访问容器,而是使用一种粒度更细的加锁机制来实现更大程度的共享,这种机制称为 分段锁, 在这种机制中,任意数量的读取线程可以并发地访问Map, 执行读取操作的线程和执行写入操作的线程可以并发地访问Map,

ConcurrentHashMap 带来的结果是: 在并发访问环境下将实现更高的吞吐量,而在单线程环境中只损失非常小的性能。不会抛出ConcurrentModificationException,因此不需要在迭代过程中对容器加锁。在ConcurrentHashMap 中没有实现对Map以提供独占访问。在Hashtable和 synchronizedMap中,获得Map的锁能防止其他线程访问这个Map,

大多数情况下,ConcurrentHashMap 来代替同步Map能进一步提高代码的可伸缩性,只有当应用程序需要加锁Map以进行独占访问时,才应该放弃使用ConcurrentHashMap 。

1,尽量将域声明为final类型,除非需要它们是可变的。
2,不可变对象一定是线程安全的。

不可变对象能极大地减低并发编程的复杂性,它们更为简单而且安全,可以任意共享而无须使用加锁或保护性复制等机制。

3,用锁来保护每个可变变量。
4,当保护同一个不变性条件中所有变量时,要使用同一个锁。
5,如果从多个线程中访问同一个可变变量时没有同步机制,那么程序会出现问题。

0 0
原创粉丝点击