Java ArrayList线程不安全

描述

验证 Java ArrayList 是否线程安全。

题目

创建两个 线程 往 Java ArrayList 集合中添加元素,验证 Java ArrayList 是否线程安全。

题目解决思路

  1. 创建一个实现 Runnable 接口的类,该类添加元素到 ArrayList 集合。
  2. 分别创建两个线程,分别添加 1000 个元素到集合中。
  3. 打印集合长度。

代码具体实现

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()); } }

运行结果如下图:

15 ArrayList线程安全.png

以上案例发现 ArrayList 是线程不安全的,若要解决该问题,应该选择线程安全的 CopyOnWriteArrayList。