HashMap多线程不建议使用

来源:互联网 发布:淘宝药店的药是真的吗 编辑:程序博客网 时间:2024/04/30 05:19
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吧。

0 0
原创粉丝点击