多线程使用的集合类

List

传统的ArrayList在多线程环境是不安全的 有下面这几种解决方案

使用vector(不推荐)

vector你可以认为就是ArrayList所有方法加了synchronized关键词 十分影响性能

Collections.synchronizedList

使用Collections中提供的syn工具方法

public class ListTest {
    public static void main(String[] args) {
        List<String>list= Collections.synchronizedList(new ArrayList<>());
        for(int i=1;i<=10;i++){
            new Thread(()->{
            list.add(UUID.randomUUID().toString().substring(0,5));
            System.out.println(list);
            },String.valueOf(i)).start();
        }
    }
}

CopyOnWriteArrayList 写入时复制


底层实现锁是通过lock锁实现 性能更好

public class ListTest {
    public static void main(String[] args) {
        List<String>list= new CopyOnWriteArrayList();
        for(int i=1;i<=10;i++){
            new Thread(()->{
            list.add(UUID.randomUUID().toString().substring(0,5));
            System.out.println(list);
            },String.valueOf(i)).start();
        }
    }
}

set

由于基本上和List一样 直接给出对应的数据类型 CopyOnWriteArraySet

ConcurrentHashMap

hashmap对应的数据类型为ConcurrentHashMap
原理部分后续更新...

posted @ 2021-09-09 16:10  一个经常掉线的人  阅读(167)  评论(0)    收藏  举报