package com.jay.test.map;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class MapTest {
public static void main(String[] args) {
final Map<Integer, Integer> map = new HashMap<Integer, Integer>();
// final Map<Integer, Integer> map = new ConcurrentHashMap<Integer,Integer>();
new Thread(new Runnable() {
public void run() {
map.put(1, 1);
}
}).start();
new Thread(new Runnable() {
public void run() {
map.put(2, 1);
}
}).start();
new Thread(new Runnable() {
public void run() {
map.put(3, 1);
}
}).start();
System.out.println(map);
}
}
今天在网上看了下多线程使用HashMap会有问题,由于Hashmap不是线程安全的,多线程还是使用ConcurrenHashMap这个比hashtable
【线程安全的】效率更高的吧。带来的问题
1、数据有概率丢失,上面的程序运行了,40%的概率丢失数据。
{1=1, 2=1}
2、有概率出现异常信息,10%吧。
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(Unknown Source)
at java.util.HashMap$EntryIterator.next(Unknown Source)
at java.util.HashMap$EntryIterator.next(Unknown Source)
at java.util.AbstractMap.toString(Unknown Source)
at java.lang.String.valueOf(Unknown Source)
at java.io.PrintStream.println(Unknown Source)
at com.jay.test.map.MapTest.main(MapTest.java:28)
鉴于以上问题还是使用ConcurrentHashMap吧。