Vector
跟ArryList一样,只不过他的所有方法都被 syn关键子包裹了,使得它是线程安全的但是严重影响性能已经被弃用了
使集合变成只读
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("1");
Collection<String> listUnEdit = Collections.unmodifiableCollection(list);
listUnEdit.add("te");
}
抛出异常
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableCollection.add(Collections.java:1055)
at com.javaDemo.collection.TestDemo.main(TestDemo.java:19)
如果集合类遇到线程安全问题怎么办
-
可以通过 Collections.synchronized()方法把一个线程不安全的集合转换成线程安全的集合
public class SynCollectionDemo { private static ArrayList list = new ArrayList(); public static void main(String[] args) { //把一个线程补权限的集合类转换成线程安全的类 List synchronizedList = Collections.synchronizedList(list); }
内部实现也跟Vector一样都是在方法上添加syn关键字
可以通过juc提供的锁,在内部操作数据的时候进行加锁处理