不安全的集合类

    科技2022-07-11  101

    线程安全的list

    import java.util.*; import java.util.concurrent.CopyOnWriteArrayList; /** * @author Jing * @date 2020/9/30 0030 17:15 * 集合的不安全Case */ public class CollUnsafe { public static void main(String[] args) { // 不安全演示 Vector<String> vector = new Vector<>(); ArrayList<String> list1 = new ArrayList<>(); List<String> list2 = Collections.synchronizedList(list1); CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<>(); // 写时复制list 升级版的线程安全的list // 点进源码可以发先一个volatile的object数组, for (int i = 0; i < 30; i++) { new Thread(()->{ list.add(UUID.randomUUID().toString().substring(0, 8)); System.out.println(list); }, String.valueOf(i)).start(); } } }

    这个东西主要就是因为多个线程想要写,所以出现了并发修改异常,单纯的很多人读是不会影响的。 生活中case:到场的人来一个人就要签到,有一个手写笔 一个花名册,花名册就是资源类。来一个写一个来一个写一个,正常情况,加了锁 有人监督,有人维持秩序,一个人签了再签。如果没有锁 一个人写到一半的时候被别人抢走了这就是并发修改异常。 写时复制,读写分离:有人想写的时候,会把共同读的这份拷贝一份,然后再扩容一个,在添加数据,返回true,然后通知大家使用更新的这个list。

    线程安全的set 写时复制的set就可以 hashset底层原理是hashmap就是用的map的key 创建了一个16 负载因子.75的map key存数据,value是一个object类型的常量。 线程安全的map 从JDK1.7版本的ReentrantLock+Segment+HashEntry,到JDK1.8版本中synchronized+CAS+HashEntry+红黑树。

    Processed: 0.020, SQL: 8