
例子
public class NotSafeDemo {
public static void main(String[] args) {
//创建集合
ArrayList<String> list = new ArrayList<>();
//创建多个线程
for (int i = 1; i <= 30; i++) {
new Thread(()->{
list.add(UUID.randomUUID().toString());
System.out.println(list);
},String.valueOf(i)).start();
}
}
}
线程不安全错误

原理
没有加锁(synchronize和lock)

Vector(不建议使用)
Collections(不建议使用)
List<String> list = Collections.synchronizedList(new ArrayList<>());
写时复制(建议使用)
List<String> list = new CopyOnWriteArrayList<>();
在多线程的情况下:如果要写入,修改数据!CopyOnWriteArrayList; 相对要比Collections.synchronizedList(); 速度快,性能提升!
CopyOnWriteArrayList的源码

有位置选择的


HashSet —> CopyOnWriteArraySet();
HashMap —> ConcurrentHashMap<>();