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中的元素中重复的丢失