java学习笔记之容器的同步与只读控制

来源:互联网 发布:手机财经软件 编辑:程序博客网 时间:2024/06/16 09:33

1、容器的同步

多线程并发访问集合的线程安全。

常用容器ArrayList、HashMap、HashSet等都是线程不安全的。
java.util.Collections提供了synchronizedXxx()方法将指定容器包装成同步。

synchronizedList(List list);synchronizedSet(Set set);synchronizedMap(Map map);

例子:

import java.util.ArrayList;import java.util.Collections;import java.util.List;/** * 容器的同步 * @author ly1 * */public class TestSyn {    public static void main(String[] args) {        List<String> list = new ArrayList<String>();        list.add("aaa");        list.add("bbb");        list.add("ccc");        List<String> list2 = new ArrayList<String>();        // 这里list2是线程安全的        list2 = Collections.synchronizedList(list);    }}

2、只读访问

容器内的元素只读,不可修改。

java.util.Collections提供了三种方法:

empty(Xxx xx);                       空的不可变的集合singleton(Object o);              含指定对象的一个元素的不可变的集合unmodifiableXxx(Xxx xx);      不可变容器

例子:

import java.util.Collections;import java.util.HashSet;import java.util.Set;/** * 容器的只读控制 *       * @author ly1 * */public class TestReadOnly {    public static void main(String[] args) {        //1、只读空容器        Set set = fun(null);        System.out.println(set.size());        //set.add("ele");      //引发java.lang.UnsupportedOperationException        //2、只含一个对象的只读容器        Set singleton = Collections.singleton(new String("Hello"));        System.out.println(singleton.size());        //singleton.add("ele");          //引发java.lang.UnsupportedOperationException        //3、只读容器        Set ReadOnlySet = new HashSet();        ReadOnlySet.add("hi");        ReadOnlySet.add("hello");        ReadOnlySet.add("welcome");        ReadOnlySet = Collections.unmodifiableSet(ReadOnlySet);        System.out.println(singleton.size());        //ReadOnlySet.add("ele");        引发java.lang.UnsupportedOperationException    }    public static Set fun(Set set){        //这里操作set        //返回set,避免返回null,引发NullPointerException        return set == null ? Collections.emptySet() : set;    }}
0 0
原创粉丝点击