解决办法
public class Test08 {
public static void main(String[] args) {
// 并发下ArrayList安全吗,Synchronized;
/**
* 解决方法:
* 1、List<String> list = new Vector<>();
* 2、List<String> list = Collections.synchronizedList(new ArrayList<>());
* 3、List<String> list = new CopyOnWriteArrayList<>();
*/
// CopyOnWrite 写入时复制 COW 计算机设计领域的一种优化策略;
// 多线程调用的时候,list,读取的时候,固定,写入(覆盖)
// 在写入的时候避免覆盖,造成数据问题!
// 读写分离
// CopyOnWrite 内部使用lock锁,而vector使用synchronized锁,效率更高
List<String> list = new CopyOnWriteArrayList<>();
for(int i = 0; i <= 10; i++){
new Thread(()->{
list.add(UUID.randomUUID().toString().substring(0,5));
System.out.println(list);
},String.valueOf(i)).start();
}
}
}
参考地址
https://www.bilibili.com/video/BV1B7411L7tE?p=12