1.HashMap与ConcurrentHashMap的区别与应用场景
从JDK1.5开始加入了ConcurrentHashMap,在面试的过程中我问过很多程序员,HashpMap与ConcurrentHashMap的区别是什么呢。我得到的回答一般都是HashpMap不是线程安全的,ConcurrentHashMap是线程安全的。这个结论很笼统。下面我来详细的举例说明他们之间的区别。
1 HashMap与ConcurrentHashMap多线程同步的误区
使用了ConcurrentHashMap就意味着多线程环境中的数据是线程同步的吗?
答案是不一定。用以下代码来作为示例来说明.
1.1 编码思路
- 分别创建一个全局HashMap和一个全局ConcurrentHashMap
- 分别赋予初始值。
- 多线程修改这两个集合
- 然后输出值,比较最终结果。
1.2 需要验证的结论
- HashMap在多线程情况下操作不能保证数据同步。
- ConcurrentHashMap多线程操作同样不能保证数据同步。
1.3 验证代码
- Demo1类,验证HashMap多线程操作数据不同步.
package com.dashidan.faq;
import java.util.HashMap;
import java.util.Map;
/**
*
* 大屎蛋教程网-dashidan.com
* HashMap与ConcurrentHashMap的区别于应用场景
* Created by 大屎蛋 on 2018/5/18.
*/
public class Demo1 {
public static void main(String[] args) {
/** 全局HashMap*/
HashMap<Integer, Integer> hashMap = new HashMap();
hashMap.put(0, 0);
/** 多线程编辑100次*/
for (int i = 0; i < 100; i++) {
new Thread(new EditThread(hashMap)).start();
}
/** 读取线程*/
new Thread(new ReadThread(hashMap)).start();
/** 输出最终结果*/
System.out.println("Demo1 main value " + hashMap.get(0));
}
}
class EditThread implements Runnable {
Map<Integer, Integer> hashMap;
public EditThread(Map<Integer, Integer> hashMap) {