1.ArrayList的线程不安全解决方案
将main方法的第一行注释打开,多执行几次,会看到如下图这样的异常信息:👇👇👇
这是一个 并发修改 异常,首先ArrayList肯定是线程不安全的,产生这个异常的原因就是可能第一个线程刚进入 ArrayList 集合中要进行 add 操作时,另外一个线程此时也进来进行 add 操作,而第三个线程又进来进行 get 操作,导致读写没办法进行同步了,最终打印结果的时候就炸了。
解决方案看代码中的剩下几行注释。
package test.notsafe;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* 演示ArrayList的线程不安全问题及解决方案
*/
public class ThreadDemo2 {
public static void main(String[] args) {
//List<String> list = new ArrayList<>();
//解决方法1:使用Vector
//List<String> list = new Vector<>();
//解决方法2:Collections
//List<String> list = Collections.synchronizedList(new ArrayList<>());
//解决方法3:CopyOnW