2022-6月更文挑战15-java并发容器二

83 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情

java并发容器二

前文

作为一类常用的数据结构,并发容器在java中尤其在多线程中有广泛的应用。之前的文章讨论过hashtable与hashmap的应用,本文将继续对一些其他的并发容器进行讨论。

SynchronizedHashMap

下面再来看另一种map容器,SynchronizedHashMap。根据名字可以很容易的推测出,该容器会不停的采用synchronized关键字对操作进行加锁,防止出现并发问题。而实际上也是如此,该容器会不停的利用synchronized关键字对于对象进行加锁,每次操作都需要先获取到锁才可以继续执行。也就是按照这种方式,实现了并发中的线程安全。但也正因如此,同样会具有效率问题。

ConcurrentHashMap

这是一种在并发环境中更加常用的容器。该容器相对于其他的容器来讲,避免了反复操作中的加锁处理。当具体的操作时,会对于需要的部分进行锁住的处理,而不会进行全局的锁定。这样也就能够提高在同一时间内对数据操作的线程数量,提高容器的并发能力。而该容器所解决的更多在于读取过程中的并发速度问题。由于数据读取时移除了对于信息的锁定,各线程不需要进行锁的竞争,也就能够在同一时刻进行更多的处理操作。而写操作则是继续使用了hashmap的处理方式,区别在于为了保证线程的安全,增加了锁定的操作。但自然而然,写入过程中锁的竞争也会带来效率的降低。但由于锁定并非是全局锁定,因此在写入过程中,当其他线程写入到不同的分片时,同样可以实现并发的处理,也就一定程度山改善了全局锁定的明显效率降低。

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。