8.8.3 同步控制
Collections
类中提供了多个synchronizedXxx()
方法,该方法可以将指定集合包装成线程同步的集合,从而可以解决多线程并发访问集合时的线程安全问题。Java
中常用的集合框架中的实现类HashSet
、 TreeSet
、 ArrayList
、 Array Deque
、 LinkedList
、 HashMap
和TreeMap
都是线程不安全的。如果有多个线程访问它们,而且有超过一个的线程试图修改它们,则存在线程安全的问题。 Collections
提供了多个类方法
可以把它们包装成线程同步的集合,如下表所示。
方法 | 描述 |
---|---|
Collections.synchronizedCollection(Collection collection) 把Collection 实例包装成线程安全的Collection 。 |
|
Collections.synchronizedList(List list) |
把List 实例包装成线程安全的List 。 |
Collections.synchronizedSet(Set set) |
把Set 实例包装成线程安全的Set 。 |
Collections.synchronizedMap(Map map) |
把Map 实例包装成线程安全的Map 。 |
下面的示例程序创建了4个线程安全的集合对象。
1 | import java.util.*; |
如何获取线程安全的集合
在上面示例程序中,直接将新创建的集合对象传给了Collections
的synchronizedXxx()
方法作为参数,这样就可以直接获取List
、Set
和Map
的线程安全实现版本。
原文链接: 8.8.3 同步控制