JUC并发编程快速入门篇(三)—— 集合的线程安全

发布时间:2022-06-27 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了JUC并发编程快速入门篇(三)—— 集合的线程安全脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

集合的线程安全

List集合线程安全问题

/*
    list集合线程安全
 */
public class ThreadDemo4 {
    public static void main(String[] args) {
        //创建ArrayList集合
//        List<String> list = new ArrayList<>(); //不安全
//        List<String> list= new Vector<>();  //效率低
//        List<String> list = Collections.synchronizedList(new ArrayList<>()); //不推荐使用
        List<String> list = new CopyOnWriteArrayList<>(); //推荐使用(重点)
        for (int i = 0; i < 10; i++) {
            new Thread(()->{
                //向集合中添加内容
                list.add(UUID.randomUUID().toString().substring(0,8));
                //从集合中获取内容
                System.out.println(list);
            },String.valueOf(i)).start();
        }
    }
}

Set集合线程安全问题

public class ThreadHashSet {
    public static void main(String[] args) {
//        Set<String> set = new HashSet<>();    //线程不安全
        Set<String> set = new CopyOnWriteArraySet<>(); //线程安全
        for (int i = 0; i < 10; i++) {
            new Thread(()->{
                //向集合中添加内容
                set.add(UUID.randomUUID().toString().substring(0, 8));
                //从集合中获取内容
                System.out.println(set);
            },String.valueOf(i)).start();
        }
    }
}

Map集合线程安全问题

public class ThreadMap {
    public static void main(String[] args) {
//        Map<String, String> map = new HashMap<>();  //线程不安全
        Map<String, String> map = new ConcurrentHashMap();  //线程安全

        for (int i = 0; i < 10; i++) {
            String key = String.valueOf(i);
            new Thread(() -> {
                //向集合中添加内容
                map.put(key, UUID.randomUUID().toString().substring(0, 8));
                //从集合中获取内容
                System.out.println(map);
            }, String.valueOf(i)).start();
        }
    }
}

总结

1.线程安全与线程不安全集合

集合类型中存在线程安全与线程不安全的两种,常见例如:

ArrayList ----- Vector

HashMap -----HashTable

但是以上都是通过 synchronized 关键字实现,效率较低

2.Collections 构建的线程安全集合

3.java.util.concurrent 并发包下

CopyOnWriteArrayList CopyOnWriteArraySet 类型,通过动态数组与线程安全个方面保证线程安全

脚本宝典总结

以上是脚本宝典为你收集整理的JUC并发编程快速入门篇(三)—— 集合的线程安全全部内容,希望文章能够帮你解决JUC并发编程快速入门篇(三)—— 集合的线程安全所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:并发