011Java并发包008集合中的线程安全问题

1 List

1.1 代码

代码如下:

1 public static void main(String[] args) {
2     List<String> list = new ArrayList<>();
3     for (int i = 0; i < 10; i++) {
4         new Thread(() -> {
5             list.add(UUID.randomUUID().toString().substring(0, 8));
6             System.out.println(list);
7         }, String.valueOf(i)).start();
8     }
9 }

1.2 运行

运行结果出现异常:

1 Exception in thread "1" Exception in thread "8" java.util.ConcurrentModificationException

说明出现了并发修改异常。

2 Set

2.1 代码

代码如下:

1 public static void main(String[] args) {
2     Set<String> set = new HashSet<>();
3     for (int i = 0; i < 10; i++) {
4         new Thread(() -> {
5             set.add(UUID.randomUUID().toString().substring(0, 8));
6             System.out.println(set);
7         }, String.valueOf(i)).start();
8     }
9 }

2.2 运行

运行结果出现异常:

1 Exception in thread "1" Exception in thread "8" java.util.ConcurrentModificationException

说明出现了并发修改异常。

3 Map

3.1 代码

代码如下:

 1 public static void main(String[] args) {
 2     Map<String, String> map = new HashMap<>();
 3     for (int i = 0; i < 10; i++) {
 4         String key = String.valueOf(i);
 5         new Thread(() -> {
 6             map.put(key, UUID.randomUUID().toString().substring(0, 8));
 7             System.out.println(map);
 8         }, String.valueOf(i)).start();
 9     }
10 }

3.2 运行

运行结果出现异常:

1 Exception in thread "1" Exception in thread "8" java.util.ConcurrentModificationException

说明出现了并发修改异常。

 

上一篇:java_类型转换详解


下一篇:go slice to struct