1、vector
示例:ArrayList list = new vector();
原理:使用了synchronized关键字。
2、Collections.synchronizedList(list)
示例:List list = Collections.synchronizedList(new ArrayList());
原理:方法都加上了synchronized修饰。
3、JUC的CopyOnWriteArrayList
示例:CopyOnWriteArrayList list = new CopyOnWriteArrayList();
原理:写入的时候是重开一个数组将原数组复制到新数组,写入后将引用指向新数组。所以可变操作都通过ReentrantLock控制并发。