package com.nanjing.juc;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/**
* list集合线程不安全
*/
public class ThreadDemo_07 {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
for (int i = 0; i < 30; i++) {
new Thread(()->{
//向集合中添加内容
list.add(UUID.randomUUID().toString().substring(0,8));
//从集合获取内容
System.out.println(list);
},String.valueOf(i)).start();
}
}
}
当你用多个线程,一边往里面放,一边从里面取
就会出现并发修改异常
add方法并没有加任何锁
解决方案一:
解决方案二:
以上两种方法都比较古老,实际开发不常用,开发还是使用JUC里面给我们提供的类
CopyOnWriteArrayList
源码:
解决方法三:
那怎么解决数据不一致问题呢??
通过volatile和互斥锁来解决
详细说明: