【JavaEE】HashMap、HashTable和ConcurrentHashMap之间的区别

HashMap

HashMap跟HashTable和ConcurrentHashMap都不一样。
HashMap是线程不安全的,而HashTable和ConcurrentHashMap都是线程安全的。

HashTable

HashTable和HashMap不一样,HashTable是线程安全的,HashTable对自己加了锁(也就是this)。

就比如put方法:
【JavaEE】HashMap、HashTable和ConcurrentHashMap之间的区别_第1张图片

下面是示例图:
【JavaEE】HashMap、HashTable和ConcurrentHashMap之间的区别_第2张图片

ConcurrentHashMap

ConcurrentHashMap也是线程安全的,但是跟HashTable比起来有区别,它是对每一个链表(或者红黑树)都加了锁。
如图:
【JavaEE】HashMap、HashTable和ConcurrentHashMap之间的区别_第3张图片
当多个线程操作不同的链表(或者红黑树)时,拿到的锁不同,可以并发执行,效率比较高。

【JavaEE】HashMap、HashTable和ConcurrentHashMap之间的区别_第4张图片

你可能感兴趣的:(JavaEE,java,java-ee,多线程)