0%

8.8.3 同步控制

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
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.util.*;

public class SynchronizedTest
{
public static void main(String[] args)
{
// 下面程序创建了四个线程安全的集合对象
Collection c = Collections
.synchronizedCollection(new ArrayList());
List list = Collections.synchronizedList(new ArrayList());
Set s = Collections.synchronizedSet(new HashSet());
Map m = Collections.synchronizedMap(new HashMap());
}
}

如何获取线程安全的集合

在上面示例程序中,直接将新创建的集合对象传给了Collections的synchronizedXxx()方法作为参数,这样就可以直接获取List、Set和Map的线程安全实现版本。

原文链接: 8.8.3 同步控制