时间:2024-12-05 23:00:33
Java 线程安全的集合
1. 前言。在 Java 中我们使用最多的 List 就是 ArrayList 和 LinkedList,它们在单线程中可以说是”玩的不亦乐乎”,而在多线程并发操作时就不行了。Java 为我们提供了几种方式以适应多线程下的 List 操作场景。本文将介绍几个多线程中适用的 List,文章最后也会介绍线程安全的 Map、Set 以及 Queue 和 Deque 的几个实现类。
2. 使用 Collections.synchronizedList(List list)。因为 ArrayList 本身不是线程安全的,通过 Collections.synchronizedList(List<T> list) 可以将其包装成一个线程安全的 List。这个方法根据传入的 List 返回一个支持同步(线程安全)的 List。接下来就可以利用这个返回的 List 进行串行访问了。
3. Vector。Vector 和 List 大同小异,底层都是用数组实现,只是在它的大部分方法上添加了 synchronized 关键字,用来保证线程安全;另外,ArrayList 在扩容时是在原来的基础上扩展 0.5 倍,而 Vector 是扩展 1 倍;此外 Vector 除了 iterator() 和 listIterator() (两个都支持 fast-fail 机制)比 ArrayList 多一个不支持 fast-fail 机制的迭代器:elements(),只有 hasMoreElements() 和 nextElement() 方法。
4. CopyOnWriteArrayList。它是 ArrayList 的线程安全的变体,其中所有写操作(add,set等)都通过对底层数组进行全新复制来实现,允许存储 null 元素。
《java线程安全的list集合》不代表本网站观点,如有侵权请联系我们删除