验证 Java ArrayList 是否线程安全。
创建两个 线程 往 Java ArrayList 集合中添加元素,验证 Java ArrayList 是否线程安全。
MyRunnable 类代码:
public class MyRunnable implements Runnable {
public static ArrayList<Integer> list = new ArrayList<>();
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
list.add(i);
}
System.out.println(Thread.currentThread().getName() + "添加完毕");
}
}
测试代码:
public class Test {
public static void main(String[] args) throws InterruptedException {
System.out.println("嗨客网(www.haicoder.net)\n");
MyRunnable r = new MyRunnable();
Thread t1 = new Thread(r,"线程A");
Thread t2 = new Thread(r,"线程B");
// 线程运行
t1.start();
t2.start();
// 等待线程运行结束
t1.join();
t2.join();
// 打印集合长度
System.out.println("集合长度:" + MyRunnable.list.size());
}
}
运行结果如下图:
以上案例发现 ArrayList 是线程不安全的,若要解决该问题,应该选择线程安全的 CopyOnWriteArrayList。