版权声明:技术总结来自互联网,书籍,以及工作积累。如果觉得我的总结有帮助,欢迎分享。 https://blog.csdn.net/qq1332479771/article/details/85708479
两种方法
- java.util.Collections提供的同步方法
- package java.util.concurrent包提供的并发集合
现在对两种方法的使用做个介绍
Collections提供的同步方法
直接看java.util.Collections
的源码
public static <T> Collection<T> synchronizedCollection(Collection<T> c);
public static <T> List<T> synchronizedList(List<T> list);
public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m);
public static <T> Set<T> synchronizedSet(Set<T> s);
可以看出,对于非线程安全的集合,如ArrayList
,使用public static <T> List<T> synchronizedList(List<T> list);
方法,便是一个线程安全的了。
但是,有个很大的缺点,就是性能问题,Collections
对线程安全的保证,就是简简单单的通过关键字synchronized
来满足。
所以,就有了Java并发包
JUC提供了哪些同步集合呢?
数组
java.util.concurrent.CopyOnWriteArrayList
链表
下面这几个算用链表实现的队列
java.util.concurrent.LinkedBlockingDeque
java.util.concurrent.LinkedBlockingQueue
java.util.concurrent.LinkedTransferQueue
栈和队列
java.util.concurrent.ConcurrentLinkedDeque
java.util.concurrent.ConcurrentLinkedQueue
java.util.concurrent.ArrayBlockingQueue
Map
java.util.concurrent.ConcurrentHashMap
Set
java.util.concurrent.CopyOnWriteArraySet
其他常用类
JUC包中还提供了其他的一些重要类,来保证线程同步的,如,
java.util.concurrent.CountDownLatch
java.util.concurrent.atomic.AtomicBoolean
java.util.concurrent.atomic.AtomicInteger
java.util.concurrent.atomic.AtomicLong