赞
踩
最近在做一个业务的时候,需要考虑线程的安全性,然后选用集合的时候专门去整理了一下。
线程安全的是:
Hashtable,ConcurrentHashMap,Vector ,CopyOnWriteArrayList ,CopyOnWriteArraySet
线程不安全的是:
HashMap,ArrayList,LinkedList,HashSet,TreeSet,TreeMap
最常用的Hashmap和HashTable我做了一下测试,就很明白能看出来,线程不安全时发生的问题了
先测HashMap的:
Map<String,Integer> map = new HashMap<>(); System.out.println("map的size---->" + map.size()); Hashtable<String, Integer> table = new Hashtable<>(); System.out.println("table的size---->" + table.size()); Thread thread1 = new Thread(()->{ for(int i = 0;i < 50000;i++){ map.put(i + "", i); } }); Thread thread2 = new Thread(()->{ for(int i = 0;i < 50000;i++){ map.put(i + "a", i); } }); thread1.start(); thread2.start(); thread1.join(); thread2.join(); System.out.println("map的size---->" + map.size()); System.out.println("table的size---->" + table.size());
看下结果:
同样的,再看下HashTable的运行结果:
这安全与不安全,还是比较明显的
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。