如何在Java中使集合线程安全?
java.util包中的Collections类包含专门用于集合的方法,这些方法提供了各种附加操作,包括多态算法。
此类提供同步Collection()方法的不同变体,如下所示:
序号 | 方法及说明 |
---|---|
1 | static <T> Collection<T> synchronizedCollection(Collection<T> c) 此方法接受任何集合对象,并返回由指定集合支持的同步(线程安全)集合。 |
2 | static <T> List<T> synchronizedList(List<T> list) 此方法接受List接口的对象,并返回由指定列表支持的同步(线程安全)列表。 |
3 | static <K,V> Map<K,V> synchronizedMap(Map<K,V> m) 此方法接受Map接口的对象,并返回由指定映射支持的同步(线程安全)映射。 |
4 | static <T> Set<T> synchronizedSet(Set<T> s) 此方法接受Set接口的对象,并返回由指定集合支持的同步(线程安全)集合。 |
5 | static <K,V> SortedMap<K,V> synchronizedSortedMap(SortedMap<K,V> m) 此方法接受Map接口的对象,并返回由指定已排序映射支持的同步(线程安全)已排序映射。 |
6 | static <T> SortedSet<T> synchronizedSortedSet(SortedSet<T> s) 此方法接受synchronizedSortedSet接口的对象,并返回由指定已排序集合支持的同步(线程安全)已排序集合。 |
示例
import java.util.Collection; import java.util.Collections; import java.util.Vector; public class CollectionReadOnly { public static void main(String[] args) { //Instantiating an ArrayList object Vector<String> vector = new Vector<String>(); vector.add("JavaFx"); vector.add("Java"); vector.add("WebGL"); vector.add("OpenCV"); System.out.println(vector); Collection<String> synchronizedVector = Collections.synchronizedCollection(vector); System.out.println("Synchronized "+synchronizedVector); synchronizedVector.add("CoffeeScript"); } }
输出
[JavaFx, Java, WebGL, OpenCV] Synchronized [JavaFx, Java, WebGL, OpenCV]
广告