Java.SE01.多线程_案例03



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


猜你喜欢

转载自blog.csdn.net/u012761191/article/details/70039729