Skip to content

Latest commit

 

History

History
90 lines (65 loc) · 2.07 KB

21. synchronizedXxx().md

File metadata and controls

90 lines (65 loc) · 2.07 KB

20. synchronizedXxx()

==同步控制==:多线程并发访问集合的线程安全

1.常用容器ArrayList、HashSet、HashMap线程不安全

2.Collections提供了synchronizedXxx()方法,将指定容器包装成同步

synchronizedList() synchronizedSer() synchronizedMap()

==不可变设置==:只读访问,Collections提供了三种方法

1.emptyXxx(): 空的不可变的集合

2.singletonXxx(): 一个元素不可变的集合

3.unmodifiableXxx(): 不可变容器


==线程安全List==:

package com.alexanderli95.otherCollections.synchronizedRead;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 使用Collections管理同步容器
 */
public class Demo01 {
    public static void main(String[] args) {
        List<String> list=new ArrayList<String>();
        list.add("1");
        list.add("2");
        List<String> synList=Collections.synchronizedList(list); //转变为线程安全的List
    }
}

==只读控制==:

package com.alexanderli95.otherCollections.synchronizedRead;

import java.util.*;

/**
 * 只读设置
 * 1.
 * emptyList()
 * emptyMap()
 * emptySet()
 * 2.
 * unmodifiableList(List<? extends T> list)
 * unmodifiableMap(Map<? extends K,? extends V> m)
 * unmodifiableSet(Set<? extends T> s)
 */
public class Demo02 {
    public static void main(String[] args) {
        Map<String,String> map=new HashMap<String,String >();
        map.put("1","1");
        map.put("2","2");

        //只读控制
        Map<String,String > map2=Collections.unmodifiableMap(map);
        //map2.put("3","3"); 再添加元素会报错

        //一个元素的List
        List<String> l=Collections.singletonList(new String());
        //l.add("1");  有了一个元素之后,不能再添加
       // l.add("2");

    }

    public static Set<String> oper(Set<String> set){
        if(null==set){
            return Collections.EMPTY_SET;  //避免NullPointerException
        }

        return set;
    }
}