线程安全的集合
集合 #集合大概有4种类型:List Set Queue Map 其中Vector、HashTable、Properties是线程安全的。其中ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等都是线程不安全的。(线程不安全是指:当多个线程访问同一个集合或Map时,如果有超过一个线程修改了ArrayList集合,则程序必须手动保证该集合的同步性。) Collections提供多个获取线程安全的集合 CopyOnWriteArraylist #写有锁 读无锁的集合 加强版的读写分离 ); 其实现的原理为 : 写操作原理 :将底层的数组做了一次复制,写的是新数组 完成了赋值之后再讲新数组替换旧数组 每调用一次写 底层数组都会扩容一次 , 读操作原理 :读的是写操作完成之前的旧数组 ,写完成之后才能读到新数组的赋值。 CopyOnWriteArraySet( #序 无下标 元素不允许重复 线程安全的Set集合底层使用CopyOnWriteArraylist实现,不同的是在使用addIfAbsent() 添加元素,会遍历数组 ,如果有存在的元素则不添加 。 其实现的原理为 : 表面上使用add方法,底层使用的是CopyOnWriteArraylist的addIfAbsent() 来判断要插入的新值是否存在