1.线程安全的集合与Map
package day01; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; /** * 线程安全的集合与Map * @author 爱吃木鱼的猫 * */ public class Demo01 { public static void main(String[] args) { /** * ArrayList与LinkedList都不是线程安全的 */ List<String> list = new ArrayList<String>(); list.add("哈士奇"); list.add("阿拉斯加"); list.add("萨摩"); list.add("哈士奇"); System.out.println(list); list=Collections.synchronizedList(list);//将给定的list集合转换为线程安全的 System.out.println(list); /** * HashSet不是线程安全的 */ Set<String> set=new HashSet<String>(list);//list复制到HashSet中的元素中重复的丢失 System.out.println(set); set=Collections.synchronizedSet(set);//转为线程安全的set System.out.println(set); /** * HashMap不是线程安全的 */ Map<String,Integer> map=new HashMap<String ,Integer>(); map.put("Angelbaby", 1989); map.put("胡歌", 1982); map.put("霍建华", 1979); System.out.println(map); map=Collections.synchronizedMap(map);//转为线程安全的Map System.out.println(map); /** * 集合的元素操作方法不与迭代互斥. * 所以若多线程操作时,并发迭代与增删 * 元素间不同步,这可能导致迭代出错 * 所以需要自行维护互斥关系 */ } }
非线程安全:
StringBuilder; ArrayList; LinkedList ;HashSet; HashMap
线程安全:
StringBuffer; Vector;Hashtable;
list复制到HashSet中的元素中重复的丢失