ConcurrentHashMap提供了和Hashtable以及SynchronizedMap中所不同的锁机制。

1,在并发方面, ConcurrentHashMap提供了好得多的并发性。多个读操作几乎总可以并发地执行,同时进行的读和写操作通常也能并发地执行,而同时进行的写操作仍然可以不时地并发进行(相关的类也提供了类似的多个读线程的并发性,但是,只允许有一个活动的写线程)。

而现有的Hashtable或者SynchronizedMap采用的锁机制是一次锁住整个hash表,从而同一时刻只能由一个线程对其进行操作;而ConcurrentHashMap中则是一次锁住一个桶。ConcurrentHashMap默认将hash表分为16个桶,诸如get,put,remove等常用操作只锁当前需要用到的桶。这样,原来只能一个线程进入,现在却能同时有16个写线程执行,并发性能的提升是显而易见的,而读操作大部分时候都不需要用到锁。只有在size()等确实需要得到整个Map的操作时才需要锁住整个hash表。

2,在迭代方面,ConcurrentHashMap使用了一种不同的迭代方式。在这种迭代方式中,当iterator被创建后集合再发生改变就不再是抛出ConcurrentModificationException,取而代之的是在改变时new新的数据从而不影响原有的数据 ,iterator完成后再将头指针替换为新的数据 ,这样iterator线程可以使用原来老的数据,而写线程也可以并发的完成改变。

相关文章:

  • 2021-11-23
  • 2021-05-14
  • 2022-01-16
  • 2021-05-11
  • 2022-01-22
  • 2022-12-23
  • 2022-01-12
  • 2021-11-23
猜你喜欢
  • 2021-08-20
  • 2021-12-19
  • 2021-06-27
  • 2021-05-18
  • 2021-05-24
  • 2022-02-08
  • 2022-01-13
相关资源
相似解决方案