如何在 java 中使集合线程安全?

javaobject oriented programmingprogramming更新于 2024/6/29 21:51:00

java.util 包中的 Collections 类方法专门用于集合,这些方法提供涉及多态算法的各种附加操作。

此类提供 synchronizedCollection() 方法的不同变体,如下所示 −

Sr.No方法和说明
1static <T> Collection<T> synchronizedCollection(Collection<T> c)
此方法接受任何集合对象并返回由指定集合支持的同步(线程安全)集合。
2静态 <T> List<T> synchronizedList(List<T> list)
此方法接受 List 接口的对象并返回由指定列表支持的同步(线程安全)列表。
3静态 <K,V> Map<K,V> synchronizedMap(Map<K,V> m)
此方法接受 Map 接口的对象并返回由指定映射支持的同步(线程安全)映射。
4静态 <T> Set<T> synchronizedSet(Set<T> s)
此方法接受 Set 接口的对象并返回由指定集合支持的同步(线程安全)集合。
5静态 <K,V> SortedMap<K,V> synchronizedSortedMap(SortedMap<K,V> m)
此方法接受 Map 接口的对象,并返回由指定排序映射支持的同步(线程安全)排序映射。
6static <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) {
      //实例化 ArrayList 对象
      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]

相关文章