一、ArrayList 类线程安全问题
1、概述
- ArrayList 类存在线程安全问题
2、异常演示
- ListNoSafeTest.java,演示 ArrayList 类线程安全问题
package com.my.listsafe;import java.util.ArrayList;
import java.util.UUID;public class ListNoSafeTest {public static void main(String[] args) {ArrayList<String> arrayList = new ArrayList<>();for (int i = 1; i <= 30; i++) {new Thread(() -> {arrayList.add(UUID.randomUUID().toString().substring(0, 4));System.out.println(arrayList);}, "" + i).start();}}
}
- 输出结果
[1004]
[1004, 38ac]
[1004, 38ac, 5f75]
[1004, 38ac, 5f75, b217]
[1004, 38ac, 5f75, b217, f5ea]
[1004, 38ac, 5f75, b217, f5ea, 3630]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5, a581]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5, a581, 4b44]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5, a581, 4b44, 2d7f]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5, a581, 4b44, 2d7f, 1e8a]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5, a581, 4b44, 2d7f, 1e8a, f8bb]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5, a581, 4b44, 2d7f, 1e8a, f8bb, b50c]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5, a581, 4b44, 2d7f, 1e8a, f8bb, b50c, 0891]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5, a581, 4b44, 2d7f, 1e8a, f8bb, b50c, 0891, 165f]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5, a581, 4b44, 2d7f, 1e8a, f8bb, b50c, 0891, 165f, c7d2]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5, a581, 4b44, 2d7f, 1e8a, f8bb, b50c, 0891, 165f, c7d2, 1e3c]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5, a581, 4b44, 2d7f, 1e8a, f8bb, b50c, 0891, 165f, c7d2, 1e3c, 9940]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5, a581, 4b44, 2d7f, 1e8a, f8bb, b50c, 0891, 165f, c7d2, 1e3c, 9940, 8451]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5, a581, 4b44, 2d7f, 1e8a, f8bb, b50c, 0891, 165f, c7d2, 1e3c, 9940, 8451, 33a1]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5, a581, 4b44, 2d7f, 1e8a, f8bb, b50c, 0891, 165f, c7d2, 1e3c, 9940, 8451, 33a1, 0c0c]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5, a581, 4b44, 2d7f, 1e8a, f8bb, b50c, 0891, 165f, c7d2, 1e3c, 9940, 8451, 33a1, 0c0c, 3fda]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5, a581, 4b44, 2d7f, 1e8a, f8bb, b50c, 0891, 165f, c7d2, 1e3c, 9940, 8451, 33a1, 0c0c, 3fda, c2ed]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5, a581, 4b44, 2d7f, 1e8a, f8bb, b50c, 0891, 165f, c7d2, 1e3c, 9940, 8451, 33a1, 0c0c, 3fda, c2ed, 6afb]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5, a581, 4b44, 2d7f, 1e8a, f8bb, b50c, 0891, 165f, c7d2, 1e3c, 9940, 8451, 33a1, 0c0c, 3fda, c2ed, 6afb, 2574]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5, a581, 4b44, 2d7f, 1e8a, f8bb, b50c, 0891, 165f, c7d2, 1e3c, 9940, 8451, 33a1, 0c0c, 3fda, c2ed, 6afb, 2574, 9d0d]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5, a581, 4b44, 2d7f, 1e8a, f8bb, b50c, 0891, 165f, c7d2, 1e3c, 9940, 8451, 33a1, 0c0c, 3fda, c2ed, 6afb, 2574, 9d0d, a186]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5, a581, 4b44, 2d7f, 1e8a, f8bb, b50c, 0891, 165f, c7d2, 1e3c, 9940, 8451, 33a1, 0c0c, 3fda, c2ed, 6afb, 2574, 9d0d, a186, 60c5]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5, a581, 4b44, 2d7f, 1e8a, f8bb, b50c, 0891, 165f, c7d2, 1e3c, 9940, 8451, 33a1, 0c0c, 3fda, c2ed, 6afb, 2574, 9d0d, a186, 60c5, 6511]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5, a581, 4b44, 2d7f, 1e8a, f8bb, b50c, 0891, 165f, c7d2, 1e3c, 9940, 8451, 33a1, 0c0c, 3fda, c2ed, 6afb, 2574, 9d0d, a186, 60c5, 6511, 3781]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5, a581, 4b44, 2d7f, 1e8a, f8bb, b50c, 0891, 165f, c7d2, 1e3c, 9940, 8451, 33a1, 0c0c, 3fda, c2ed, 6afb, 2574, 9d0d, a186, 60c5, 6511, 3781, a371, c4bf]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5, a581, 4b44, 2d7f, 1e8a, f8bb, b50c, 0891, 165f, c7d2, 1e3c, 9940, 8451, 33a1, 0c0c, 3fda, c2ed, 6afb, 2574, 9d0d, a186, 60c5, 6511, 3781, a371, c4bf, c5a9]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5, a581, 4b44, 2d7f, 1e8a, f8bb, b50c, 0891, 165f, c7d2, 1e3c, 9940, 8451, 33a1, 0c0c, 3fda, c2ed, 6afb, 2574, 9d0d, a186, 60c5, 6511, 3781, a371, c4bf, c5a9, 633b]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5, a581, 4b44, 2d7f, 1e8a, f8bb, b50c, 0891, 165f, c7d2, 1e3c, 9940, 8451, 33a1, 0c0c, 3fda, c2ed, 6afb, 2574, 9d0d, a186, 60c5, 6511, 3781, a371, c4bf, c5a9, 633b, 8005]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5, a581, 4b44, 2d7f, 1e8a, f8bb, b50c, 0891, 165f, c7d2, 1e3c, 9940, 8451, 33a1, 0c0c, 3fda, c2ed, 6afb, 2574, 9d0d, a186, 60c5, 6511, 3781, a371, c4bf, c5a9, 633b, 8005, ce90]
[1004, 38ac, 5f75, b217, f5ea, 3630, 0a24, 543f, d11c, 870e, 898d, 6da5, c6c8, d542, eb53, 7a5a, 5b5b, ef4d, 2a53, 079a, d1fd, e41b, d7aa, d8c1, 0439, e9f7, 73c8, 8fbb, 8a5d, 8aa2, 096a, c805, 8545, cc7e, 5f3a, feae, 2678, 498a, 2912, 43ee, f2a0, d084, a678, 9b78, f9b5, a581, 4b44, 2d7f, 1e8a, f8bb, b50c, 0891, 165f, c7d2, 1e3c, 9940, 8451, 33a1, 0c0c, 3fda, c2ed, 6afb, 2574, 9d0d, a186, 60c5, 6511, 3781, a371, c4bf, c5a9, 633b, 8005, ce90, 22e8]
Exception in thread "62" java.util.ConcurrentModificationExceptionat java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1013)at java.base/java.util.ArrayList$Itr.next(ArrayList.java:967)at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:456)at java.base/java.lang.String.valueOf(String.java:4218)at java.base/java.io.PrintStream.println(PrintStream.java:1047)at com.my.listsafe.ListNoSafeTest.lambda$main$0(ListNoSafeTest.java:13)at java.base/java.lang.Thread.run(Thread.java:833)
3、异常分析
- ArrayList 的 add 方法没有做同步处理
public boolean add(E e) {ensureCapacityInternal(size + 1); // Increments modCount!!elementData[size++] = e;return true;
}
二、ArrayList 类线程安全问题处理方案
1、Vector 类
(1)基本介绍
-
Vector 是矢量队列,是 JDK 1.0 版本添加的类,继承于 AbstractList 类,实现了 List、RandomAccess、Cloneable 接口
-
Vector 类继承了 AbstractList,实现了 List 接口,所以它是一个队列,支持相关的增删改查操作
-
Vector 类实现了 RandmoAccess 接口,提供了随机访问功能,RandmoAccess 接口是 Java 中用来被 List 实现类实现并为其提供快速访问功能的,在 Vector 中,可以通过元素的序号快速获取元素对象
-
Vector 类实现了 Cloneable 接口,实现了 clone 方法
(2)演示
- VectorTest 类
package com.my.listsafe;import java.util.UUID;
import java.util.Vector;public class VectorTest {public static void main(String[] args) {Vector<Object> vector = new Vector<>();for (int i = 1; i <= 30; i++) {new Thread(() -> {vector.add(UUID.randomUUID().toString().substring(0, 4));System.out.println(vector);}, "" + i).start();}}
}
(3)原理
Vector 类的 add 方法被 synchronized 关键字修饰
public synchronized boolean add(E e) {modCount++;ensureCapacityHelper(elementCount + 1);elementData[elementCount++] = e;return true;
}
2、Collections 的 synchronizedList 方法
(1)基本介绍
- Collections 的 synchronizedList 方法可以返回指定列表支持的同步列表
(2)演示
- SynchronizedListTest 类
package com.my.listsafe;import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.UUID;public class SynchronizedListTest {public static void main(String[] args) {List<Object> list = Collections.synchronizedList(new ArrayList<>());for (int i = 1; i <= 30; i++) {new Thread(() -> {list.add(UUID.randomUUID().toString().substring(0, 4));System.out.println(list);}, "" + i).start();}}
}
3、CopyOnWriteArrayList 类
(1)基本介绍
-
CopyOnWriteArrayList 类采用读写分离思想,通俗的理解是往一个容器添加元素的时,不直接往当前容器添加,而是先将当前容器进行复制,复制出一个新的容器,然后往新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器,这样做的好处是可以对容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素,读和写采用不同的容器
-
缺点是内存占用较大和数据不一致问题
(2)演示
- CopyOnWriteArrayListTest 类
package com.my.listsafe;import java.util.UUID;
import java.util.concurrent.CopyOnWriteArrayList;public class CopyOnWriteArrayListTest {public static void main(String[] args) {CopyOnWriteArrayList copyOnWriteArrayList = new CopyOnWriteArrayList();for (int i = 0; i < 30; i++) {new Thread(() -> {copyOnWriteArrayList.add(UUID.randomUUID().toString().substring(0, 4));System.out.println(copyOnWriteArrayList);}, "" + i).start();}}
}
(3)原理
- CopyOnWriteArrayList 类 add 方法源码
public boolean add(E e) {final ReentrantLock lock = this.lock;lock.lock();try {Object[] elements = getArray();int len = elements.length;Object[] newElements = Arrays.copyOf(elements, len + 1);newElements[len] = e;setArray(newElements);return true;} finally {lock.unlock();}
}
三、HashSet 、HashMap 类线程安全问题
1、概述
- HashSet 、HashMap 类存在线程安全问题
2、异常演示
- HashSetNoSafeTest.java,演示 HashSet 类线程安全问题
package com.my.listsafe;import java.util.HashSet;
import java.util.UUID;public class HashSetNoSafeTest {public static void main(String[] args) {HashSet<Object> set = new HashSet<>();for (int i = 0; i < 50; i++) {new Thread(() -> {set.add(UUID.randomUUID().toString().substring(0, 4));System.out.println(set);}, "" + i).start();}}
}
- 输出结果
[2a0f]
[0936, cd59, 2a0f]
[cd59, 2a0f]
[c3e9, 0936, cd59, 2a0f]
[4585, c3e9, 0936, cd59, 2a0f]
[fb57, 4585, c3e9, 0936, cd59, 2a0f]
[fb57, 4585, c3e9, 0936, cd59, e97e, 2a0f]
[fb57, 1425, 4585, c3e9, 0936, cd59, e97e, 2a0f]
[fb57, 1425, 4585, 98ad, c3e9, 0936, cd59, e97e, 2a0f]
[fb57, 1425, 4585, 98ad, c3e9, 1b52, 0936, cd59, e97e, 2a0f]
[fb57, 1425, 35a9, 4585, 98ad, c3e9, 1b52, 0936, cd59, e97e, 2a0f]
[fb57, 1425, 7bd4, 35a9, 4585, 98ad, c3e9, 1b52, 0936, cd59, e97e, 2a0f]
[25c7, 7bd4, 35a9, 4585, c3e9, cd59, e97e, fb57, 1425, 98ad, 1b52, 0936, 2a0f]
[25c7, 7bd4, 35a9, e175, 4585, c3e9, cd59, e97e, fb57, 1425, 98ad, 1b52, 0936, 2a0f]
[25c7, 7bd4, 35a9, e175, 4585, c3e9, cd59, e97e, fb57, 1425, 98ad, 1b52, 0936, 37cb, 2a0f]
[25c7, 7bd4, 35a9, e175, 4585, c3e9, cd59, e97e, fb57, 1425, 98ad, 1b52, 0936, 37cb, 2a0f, 229b]
[25c7, 7bd4, 35a9, e175, 4585, c3e9, cd59, e97e, fb57, 1425, 98ad, 1b52, 0936, 214b, 37cb, 2a0f, 229b]
[25c7, 7bd4, 35a9, e175, 4585, c3e9, 66f6, cd59, e97e, fb57, 1425, 98ad, 1b52, 0936, 214b, 37cb, 2a0f, 229b]
[25c7, 7bd4, 35a9, e175, 4585, c3e9, 66f6, cd59, e97e, c6e2, fb57, 1425, 98ad, 1b52, 0936, 214b, 37cb, 2a0f, 229b]
[25c7, 7bd4, 35a9, 0bce, e175, 4585, c3e9, 66f6, cd59, e97e, c6e2, fb57, 1425, 98ad, 1b52, 0936, 214b, 37cb, 2a0f, 229b]
[25c7, 7bd4, dfd0, 35a9, 0bce, e175, 4585, c3e9, 66f6, cd59, e97e, c6e2, fb57, 1425, 98ad, 1b52, 0936, 214b, 37cb, 2a0f, 229b]
[25c7, 7bd4, dfd0, 35a9, 0bce, e175, 9535, 4585, c3e9, 66f6, cd59, e97e, c6e2, fb57, 1425, 98ad, 1b52, 0936, 214b, 37cb, 2a0f, 229b]
[25c7, 7bd4, dfd0, 35a9, 0bce, e175, 9535, 4585, c3e9, 66f6, cd59, e97e, c6e2, fb57, 1425, 7c30, 98ad, 1b52, 0936, 214b, 37cb, 2a0f, 229b]
[25c7, 7bd4, dfd0, 35a9, 0bce, e175, 9535, 4585, c3e9, 66f6, cd59, e97e, c6e2, fb57, 1425, 7c30, b849, 98ad, 1b52, 0936, 214b, 37cb, 2a0f, 229b]
[7bd4, 35a9, 0bce, c3e9, 66f6, c6e2, 98ad, 37cb, 229b, 25c7, dfd0, e175, 9535, 4585, cd59, e97e, fb57, 1425, 2898, 7c30, b849, 1b52, 0936, 214b, 2a0f]
[7bd4, 35a9, 0bce, c3e9, 66f6, c6e2, 5d61, 98ad, 37cb, 229b, 25c7, dfd0, e175, 9535, 4585, cd59, e97e, fb57, 1425, 2898, 7c30, b849, 1b52, 0936, 214b, 2a0f]
[7bd4, 35a9, 0bce, a088, c3e9, 66f6, c6e2, 5d61, 98ad, 37cb, 229b, 25c7, dfd0, e175, 9535, 4585, cd59, e97e, fb57, 1425, 2898, 7c30, b849, 1b52, 0936, 214b, 2a0f]
[7bd4, 35a9, 0bce, a088, c3e9, 66f6, c6e2, 5d61, 98ad, 37cb, 229b, 25c7, dfd0, e175, 9535, 4585, cd59, e97e, fb57, 1425, 2898, 7c30, b849, 1b52, 0936, 214b, 9ed8, 2a0f]
[7bd4, d157, 35a9, 0bce, a088, c3e9, 66f6, c6e2, 5d61, 98ad, 37cb, 229b, 25c7, dfd0, e175, 9535, 4585, cd59, e97e, fb57, 1425, 2898, 7c30, b849, 1b52, 0936, 214b, 9ed8, 2a0f]
[7bd4, d157, 35a9, 0bce, a088, c3e9, 66f6, c6e2, 5d61, 98ad, 37cb, 229b, 25c7, dfd0, e175, 9535, 4585, cd59, e97e, fb57, 1425, 2898, 7c30, 2235, b849, 1b52, 0936, 214b, 9ed8, 2a0f]
[7bd4, d157, 35a9, 0bce, a088, c3e9, 66f6, c6e2, 5d61, 98ad, 37cb, 229b, 25c7, dfd0, e175, 9535, 4585, cd59, e97e, fb57, 1425, 2898, 7c30, 2235, b849, 1b52, 0936, 214b, 9ed8, 5943, 2a0f]
[7bd4, d157, 35a9, 0bce, a088, c3e9, 66f6, c6e2, 5d61, 98ad, 37cb, 229b, 25c7, dfd0, e175, 9535, 6df6, 4585, cd59, e97e, fb57, 1425, 2898, 7c30, 2235, b849, 1b52, 0936, 214b, 9ed8, 5943, 2a0f]
[7bd4, d157, 35a9, 0bce, a088, c3e9, 66f6, c8e1, c6e2, 5d61, 98ad, 37cb, 229b, 25c7, dfd0, e175, 9535, 6df6, 4585, cd59, e97e, fb57, 1425, 2898, 7c30, 2235, b849, 1b52, 0936, 214b, 9ed8, 5943, 2a0f]
[7bd4, d157, 35a9, 0bce, a088, c3e9, 66f6, c8e1, c6e2, 5d61, 98ad, 37cb, 229b, 25c7, dfd0, e175, 9535, 6df6, 4585, cd59, e97e, fb57, 1425, 2898, 7c30, 2235, b849, 1b52, 2a4f, 0936, 214b, 9ed8, 5943, 2a0f]
[7bd4, d157, 35a9, 0bce, a088, c3e9, 66f6, 74a6, c8e1, c6e2, 5d61, 98ad, 37cb, 229b, 25c7, dfd0, e175, 9535, 6df6, 4585, cd59, e97e, fb57, 1425, 2898, 7c30, 2235, b849, 1b52, 2a4f, 0936, 214b, 9ed8, 5943, 2a0f]
[7bd4, d157, 35a9, 0bce, a088, c3e9, 66f6, b87e, 74a6, c8e1, c6e2, 5d61, 98ad, 37cb, 229b, 25c7, dfd0, e175, 9535, 6df6, 4585, cd59, e97e, fb57, 1425, 2898, 7c30, 2235, b849, 1b52, 2a4f, 0936, 214b, 9ed8, 5943, 2a0f]
[7bd4, d157, 35a9, 0bce, a088, c3e9, 66f6, b87e, e6c9, 74a6, c8e1, c6e2, 5d61, 98ad, 37cb, 229b, 25c7, dfd0, e175, 9535, 6df6, 4585, cd59, e97e, fb57, 1425, 2898, 7c30, 2235, b849, 1b52, 2a4f, 0936, 214b, 9ed8, 5943, 2a0f]
[7bd4, d157, 35a9, 0bce, a088, c3e9, 66f6, b87e, e6c9, 69f6, 74a6, c8e1, c6e2, 5d61, 98ad, 37cb, 229b, 25c7, dfd0, e175, 9535, 6df6, 4585, cd59, e97e, fb57, 1425, 2898, 7c30, 2235, b849, 1b52, 2a4f, 0936, 214b, 9ed8, 5943, 2a0f]
[7bd4, d157, 35a9, 0bce, a088, c3e9, 66f6, b87e, e6c9, 69f6, 74a6, c8e1, c6e2, 1ca6, 5d61, 98ad, 37cb, 229b, 25c7, dfd0, e175, 9535, 6df6, 4585, cd59, e97e, fb57, 1425, 2898, 7c30, 2235, b849, 1b52, 2a4f, 0936, 214b, 9ed8, 5943, 2a0f]
[7bd4, d157, 35a9, 0bce, a088, c3e9, 66f6, b87e, e6c9, c2a6, 69f6, 74a6, c8e1, c6e2, 1ca6, 5d61, 98ad, 37cb, 229b, 25c7, dfd0, e175, 9535, 6df6, 4585, cd59, e97e, fb57, 1425, 2898, 7c30, 2235, b849, 1b52, 2a4f, 0936, 214b, 9ed8, 5943, 2a0f]
[7bd4, d157, 35a9, 0bce, a088, c3e9, 66f6, b87e, e6c9, c2a6, 69f6, 74a6, c8e1, c6e2, a12e, 1ca6, 5d61, 98ad, 37cb, 229b, 25c7, dfd0, e175, 9535, 6df6, 4585, cd59, e97e, fb57, 1425, 2898, 7c30, 2235, b849, 1b52, 2a4f, 0936, 214b, 9ed8, 5943, 2a0f]
[7bd4, d157, 35a9, 0bce, a088, c3e9, 66f6, b87e, e6c9, c2a6, 552c, 69f6, 74a6, c8e1, c6e2, a12e, 1ca6, 5d61, 98ad, 37cb, 229b, 25c7, dfd0, e175, 9535, 6df6, 4585, cd59, e97e, fb57, 1425, 2898, 7c30, 2235, b849, 1b52, 2a4f, 0936, 214b, 9ed8, 5943, 2a0f]
[7bd4, d157, 35a9, 0bce, a088, c3e9, 66f6, b87e, e6c9, c2a6, 552c, 69f6, 74a6, c8e1, c6e2, a12e, 1ca6, 5d61, 98ad, 37cb, 229b, 25c7, dfd0, c199, e175, 9535, 6df6, 4585, cd59, e97e, fb57, 1425, 2898, 7c30, 2235, b849, 1b52, 2a4f, 0936, 214b, 9ed8, 5943, 2a0f]
[7bd4, d157, 35a9, 0bce, a088, c3e9, 66f6, b87e, e6c9, c2a6, 552c, 69f6, 74a6, c8e1, c6e2, a12e, 1ca6, 14ac, 5d61, 98ad, 37cb, 229b, 25c7, dfd0, c199, e175, 9535, 6df6, 4585, cd59, e97e, fb57, 1425, 2898, 7c30, 2235, b849, 1b52, 2a4f, 0936, 214b, 9ed8, 5943, 2a0f]
[7bd4, d157, 35a9, 0bce, a088, c3e9, 66f6, b87e, e6c9, c2a6, 552c, 69f6, 74a6, c8e1, c6e2, a12e, 1ca6, 14ac, 5d61, 98ad, d712, 37cb, 229b, 25c7, dfd0, c199, e175, 9535, 6df6, 4585, cd59, e97e, fb57, 1425, 2898, 7c30, 2235, b849, 1b52, 2a4f, 0936, 214b, 9ed8, 5943, 2a0f]
[7bd4, d157, 35a9, 0bce, a088, c3e9, 66f6, b87e, e6c9, c2a6, 552c, 69f6, 74a6, c8e1, c6e2, a12e, 1ca6, 14ac, 5d61, 98ad, d712, 37cb, 229b, dda2, 25c7, dfd0, c199, e175, 9535, 6df6, 4585, cd59, e97e, fb57, 1425, 2898, 7c30, 2235, b849, 1b52, 2a4f, 0936, 214b, 9ed8, 5943, 2a0f]
[e003, 7bd4, d157, 35a9, 0bce, a088, c3e9, 66f6, b87e, e6c9, c2a6, 552c, 69f6, 74a6, c8e1, c6e2, a12e, 1ca6, 14ac, 5d61, 98ad, d712, 37cb, 229b, dda2, 25c7, dfd0, c199, e175, 9535, 6df6, 4585, cd59, e97e, fb57, 1425, 2898, 7c30, 2235, b849, 1b52, 2a4f, 0936, 214b, 9ed8, 5943, 2a0f]
[e003, 7bd4, d157, 35a9, 0bce, a088, c3e9, 66f6, b87e, e6c9, c2a6, 552c, 69f6, 74a6, c8e1, c6e2, a12e, 1ca6, 14ac, 5d61, f938, 98ad, d712, 37cb, 229b, dda2, 25c7, dfd0, c199, e175, 9535, 6df6, 4585, cd59, e97e, fb57, 1425, 2898, 7c30, 2235, b849, 1b52, 2a4f, 0936, 214b, 9ed8, 5943, 2a0f]
[e003, 7bd4, d157, 0bce, a088, c3e9, b87e, 552c, 69f6, 74a6, 14ac, f938, 98ad, d712, 229b, 25c7, 4585, e97e, 1425, 2235, b849, 1b52, 0936, 214b, 9ed8, 5943, 35a9, 66f6, e6c9, c2a6, c8e1, c6e2, a12e, 1ca6, 5d61, 37cb, dda2, dfd0, c199, e175, 9535, 6df6, cd59, a3d5, fb57, 2898, 7c30, 2a4f, 2a0f]
[e003, 7bd4, d157, 0bce, a088, c3e9, b87e, 552c, 69f6, 74a6, 14ac, f938, 98ad, d712, 229b, 25c7, 4585, e97e, 1425, 2235, b849, 1b52, 0936, 214b, 9ed8, 5943, 35a9, 66f6, e6c9, c2a6, c8e1, c6e2, a12e, 1ca6, 5d61, 37cb, dda2, dfd0, c199, e175, 9535, 6df6, cd59, a3d5, fb57, 2898, 7c30, ec64, 2a4f, 2a0f]
[e003, 7bd4, d157, 0bce, a088, c3e9, b87e, 552c, 69f6, 74a6, 14ac, f938, 98ad, d712, 229b, 25c7, 4585, e97e, 1425, 2235, b849, 1b52, 0936, 214b, 9ed8, 5943, 35a9, 66f6, e6c9, c2a6, c8e1, c6e2, 3ebf, a12e, 1ca6, 5d61, 37cb, dda2, dfd0, c199, e175, 9535, 6df6, cd59, a3d5, fb57, 2898, 7c30, ec64, 2a4f, 2a0f]
[e003, 7bd4, d157, c2ff, 0bce, a088, c3e9, b87e, 552c, 69f6, 74a6, 14ac, f938, 98ad, d712, 229b, 25c7, 4585, e97e, 1425, 2235, b849, 1b52, 0936, 214b, 9ed8, 5943, 35a9, 66f6, e6c9, c2a6, c8e1, c6e2, 3ebf, a12e, 1ca6, 5d61, 37cb, dda2, dfd0, c199, e175, 9535, 6df6, cd59, a3d5, fb57, 2898, 7c30, ec64, 2a4f, 2a0f]
[e003, 7bd4, d157, c2ff, 0bce, a088, c3e9, b87e, 552c, 69f6, 74a6, 14ac, f938, 98ad, d712, 229b, 25c7, 4585, e97e, 1425, 2235, b849, 1b52, 0936, 214b, 9ed8, 5943, 35a9, 66f6, e6c9, c2a6, c8e1, c6e2, 3fdf, 3ebf, a12e, 1ca6, 5d61, 37cb, dda2, dfd0, c199, e175, 9535, 6df6, cd59, a3d5, fb57, 2898, 7c30, ec64, 2a4f, 2a0f]
[e003, 7bd4, d157, c2ff, 0bce, a088, c3e9, b87e, 552c, 69f6, 74a6, 14ac, f938, 98ad, d712, 229b, 25c7, 4585, e97e, 1425, 2235, b849, 1b52, 0936, 214b, 9ed8, 5943, 35a9, 66f6, e6c9, c2a6, c8e1, c6e2, 3fdf, 3ebf, a12e, 1ca6, 5d61, 37cb, dda2, dfd0, c199, e175, 9535, 6df6, c270, cd59, a3d5, fb57, 2898, 7c30, ec64, 2a4f, 2a0f]
[e003, 7bd4, d157, c2ff, 0bce, a088, c3e9, b87e, 552c, 69f6, 74a6, 14ac, f938, 98ad, d712, 229b, 25c7, 4585, e97e, 1425, 2235, b849, 1b52, 0936, 214b, 9ed8, 5943, 35a9, 66f6, e6c9, c2a6, c8e1, c6e2, 3fdf, 3ebf, a12e, 1ca6, 5d61, 37cb, bbc5, dda2, dfd0, c199, e175, 9535, 6df6, c270, cd59, a3d5, fb57, 2898, 7c30, ec64, 2a4f, 2a0f]
[e003, 7bd4, d157, c2ff, 0bce, a088, c3e9, b87e, 552c, 69f6, 74a6, 14ac, f938, 98ad, d712, 229b, 25c7, 4585, e97e, 1425, 2235, b849, 1b52, 0936, 214b, 9ed8, 5943, 35a9, 66f6, e6c9, c2a6, c8e1, c6e2, 3fdf, 3ebf, a12e, 1ca6, 5d61, ee72, 37cb, bbc5, dda2, dfd0, c199, e175, 9535, 6df6, c270, cd59, a3d5, fb57, 2898, 7c30, ec64, 2a4f, 2a0f]
[e003, 7bd4, d157, c2ff, 0bce, a088, c3e9, b87e, 552c, 69f6, 74a6, 14ac, f938, 98ad, d712, 229b, 25c7, 4585, e97e, 1425, 2235, b849, 1b52, 0936, 214b, 9ed8, 5943, 1a72, 35a9, 66f6, e6c9, c2a6, c8e1, c6e2, 3fdf, 3ebf, a12e, 1ca6, 5d61, ee72, 37cb, bbc5, dda2, dfd0, c199, e175, 9535, 6df6, c270, cd59, a3d5, fb57, 2898, 7c30, ec64, 2a4f, 2a0f]
[e003, 7bd4, d157, c2ff, 0bce, a088, c3e9, b87e, 552c, 69f6, 74a6, 14ac, 01be, f938, 98ad, d712, 229b, 25c7, 4585, e97e, 1425, 2235, b849, 1b52, 0936, 214b, 9ed8, 5943, 1a72, 35a9, 66f6, e6c9, c2a6, c8e1, c6e2, 3fdf, 3ebf, a12e, 1ca6, 5d61, ee72, 37cb, bbc5, dda2, dfd0, c199, e175, 9535, 6df6, c270, cd59, a3d5, fb57, 2898, 7c30, ec64, 2a4f, 2a0f]
[e003, 7bd4, d157, c2ff, 0bce, a088, dc6b, c3e9, b87e, 552c, 69f6, 74a6, 14ac, 01be, f938, 98ad, d712, 229b, 25c7, 4585, e97e, 1425, 2235, b849, 1b52, 0936, 214b, 9ed8, 5943, 1a72, 35a9, 66f6, e6c9, c2a6, c8e1, c6e2, 3fdf, 3ebf, a12e, 1ca6, 5d61, ee72, 37cb, bbc5, dda2, dfd0, c199, e175, 9535, 6df6, c270, cd59, a3d5, fb57, 2898, 7c30, ec64, 2a4f, 2a0f]
[e003, 7bd4, d157, c2ff, 0bce, a088, dc6b, c3e9, b87e, 552c, 69f6, 74a6, 14ac, 01be, f938, 98ad, d712, 229b, 25c7, 4585, e97e, 1425, 2235, b849, 1b52, 0936, 214b, 9ed8, 5943, 1a72, 35a9, 66f6, e6c9, c2a6, c8e1, c6e2, 3fdf, 3ebf, a12e, 1ca6, 5d61, ee72, 37cb, bbc5, 8e70, dda2, dfd0, c199, e175, 9535, 6df6, c270, cd59, a3d5, fb57, 2898, 7c30, ec64, 2a4f, 2a0f]
[e003, 7bd4, d157, c2ff, 0bce, a088, dc6b, c3e9, b87e, 552c, 69f6, 74a6, 14ac, 01be, f938, 98ad, d712, 229b, 3d0e, 25c7, 4585, e97e, 1425, 2235, b849, 1b52, 0936, 214b, 9ed8, 5943, 1a72, 35a9, 66f6, e6c9, c2a6, c8e1, c6e2, 3fdf, 3ebf, a12e, 1ca6, 5d61, ee72, 37cb, bbc5, 8e70, dda2, dfd0, c199, e175, 9535, 6df6, c270, cd59, a3d5, fb57, 2898, 7c30, ec64, 2a4f, 2a0f]
[e003, 7bd4, d157, c2ff, 0bce, a088, dc6b, c3e9, b87e, 552c, 69f6, 74a6, 14ac, 01be, f938, 98ad, d712, 229b, 3d0e, 25c7, 4585, e97e, 1425, 2235, b849, 1b52, 0936, 214b, 9ed8, 5943, 1a72, 35a9, 66f6, e6c9, c2a6, c8e1, c6e2, 3fdf, 3ebf, a12e, 1ca6, 5d61, ee72, 0bf7, 37cb, bbc5, 8e70, dda2, dfd0, c199, e175, 9535, 6df6, c270, cd59, a3d5, fb57, 2898, 7c30, ec64, 2a4f, 2a0f]
[e003, 7bd4, d157, c2ff, 0bce, a088, dc6b, c3e9, b87e, 552c, 69f6, 74a6, 14ac, 01be, f938, 98ad, d712, 229b, 3d0e, 25c7, 4585, e97e, 1425, 2235, b849, 1b52, 0936, 214b, 9ed8, 5943, 1a72, 35a9, 66f6, e6c9, c2a6, fb8a, c8e1, c6e2, 3fdf, 3ebf, a12e, 1ca6, 5d61, ee72, 0bf7, 37cb, bbc5, 8e70, dda2, dfd0, c199, e175, 9535, 6df6, c270, cd59, a3d5, fb57, 2898, 7c30, ec64, 2a4f, 2a0f]
[e003, 7bd4, d157, c2ff, 0bce, a088, dc6b, c3e9, b87e, 552c, 69f6, 74a6, 14ac, 01be, f938, 98ad, d712, 229b, 3d0e, 25c7, 4585, e97e, 1425, 2235, b849, 1b52, 0936, 214b, 9ed8, 5943, 1a72, 35a9, 66f6, e6c9, c2a6, fb8a, c94d, c8e1, c6e2, 3fdf, 3ebf, a12e, 1ca6, 5d61, ee72, 0bf7, 37cb, bbc5, 8e70, dda2, dfd0, c199, e175, 9535, 6df6, c270, cd59, a3d5, fb57, 2898, 7c30, ec64, 2a4f, 2a0f]
[e003, 7bd4, d157, c2ff, 0bce, a088, dc6b, c3e9, b87e, 552c, 69f6, 74a6, 14ac, 01be, f938, 98ad, d712, 229b, 3d0e, 25c7, 4585, e97e, 1425, 2235, b849, 1b52, 0936, 214b, 9ed8, 5943, 1a72, 35a9, 66f6, e6c9, c2a6, fb8a, c94d, c8e1, c6e2, 3fdf, 3ebf, a12e, 1ca6, 5d61, ee72, 0bf7, 724f, 37cb, bbc5, 8e70, dda2, dfd0, c199, e175, 9535, 6df6, c270, cd59, a3d5, fb57, 2898, 7c30, ec64, 2a4f, 2a0f]
[e003, 7bd4, d157, c2ff, 0bce, a088, dc6b, 8777, c3e9, b87e, 552c, 69f6, 74a6, 14ac, 01be, f938, 98ad, d712, 229b, 3d0e, 25c7, 4585, e97e, 1425, 2235, b849, 1b52, 0936, 214b, 9ed8, 5943, 1a72, 35a9, 66f6, e6c9, c2a6, fb8a, c94d, c8e1, c6e2, 3fdf, 3ebf, a12e, 1ca6, 5d61, ee72, 0bf7, 724f, 37cb, bbc5, 8e70, dda2, dfd0, c199, e175, 9535, 6df6, c270, cd59, a3d5, fb57, 2898, 7c30, ec64, 2a4f, 2a0f]
[e003, 7bd4, d157, c2ff, 0bce, a088, dc6b, 8777, c3e9, b87e, 552c, 69f6, 74a6, 14ac, 01be, f938, 98ad, d712, 229b, 3d0e, 25c7, 4585, e97e, 1425, 2235, b849, 1b52, 0936, 214b, 9ed8, 5943, 1a72, 35a9, 66f6, e6c9, c2a6, fb8a, c94d, c8e1, c6e2, 3fdf, 3ebf, a12e, 1ca6, 5d61, ee72, 0bf7, 724f, 37cb, bbc5, 8e70, ce3c, dda2, dfd0, c199, e175, 9535, 6df6, c270, cd59, a3d5, fb57, 2898, 7c30, ec64, 2a4f, 2a0f]
[e003, 7bd4, d157, c2ff, 0bce, a088, dc6b, 8777, c3e9, b87e, 552c, 69f6, 74a6, 14ac, 01be, f938, 98ad, c9dc, d712, 229b, 3d0e, 25c7, 4585, e97e, 1425, 2235, b849, 1b52, 0936, 214b, 9ed8, 5943, 1a72, 35a9, 66f6, e6c9, c2a6, fb8a, c94d, c8e1, c6e2, 3fdf, 3ebf, a12e, 1ca6, 5d61, ee72, 0bf7, 724f, 37cb, bbc5, 8e70, ce3c, dda2, dfd0, c199, e175, 9535, 6df6, c270, cd59, a3d5, fb57, 2898, 7c30, ec64, 2a4f, 2a0f]
[e003, 7bd4, d157, c2ff, 0bce, a088, dc6b, 8777, c3e9, b87e, 552c, 69f6, 74a6, 14ac, 01be, f938, 98ad, c9dc, d712, 229b, 3d0e, 25c7, 4585, e97e, 1425, 2235, b849, 52d6, abc7, 1b52, 0936, 214b, 9ed8, 5943, 1a72, 35a9, 66f6, e6c9, c2a6, fb8a, c94d, c8e1, c6e2, 3fdf, 3ebf, a12e, 1ca6, 5d61, ee72, 0bf7, 724f, 37cb, bbc5, 8e70, ce3c, dda2, dfd0, c199, e175, 9535, 6df6, c270, cd59, a3d5, fb57, 2898, 7c30, ec64, 2a4f, 2a0f]
[e003, 7bd4, d157, c2ff, 0bce, a088, dc6b, 8777, c3e9, b87e, 552c, 69f6, 74a6, 14ac, 01be, f938, 98ad, c9dc, d712, 229b, 3d0e, 25c7, 4585, e97e, 1425, 2235, b849, 52d6, abc7, 1b52, 0936, 214b, 9ed8, 5943, 1a72, 35a9, 66f6, e6c9, c2a6, fb8a, c94d, c8e1, c6e2, 3fdf, 3ebf, a12e, 1ca6, 5d61, ee72, 0bf7, 724f, 37cb, bbc5, 8e70, ce3c, dda2, dfd0, c199, e175, 9535, 6df6, c270, cd59, a3d5, fc79, fb57, 2898, 7c30, ec64, 2a4f, 2a0f]
[e003, 7bd4, d157, c2ff, 0bce, a088, dc6b, 8777, c3e9, b87e, 552c, 69f6, 74a6, 14ac, 01be, f938, 98ad, c9dc, d712, 229b, 3d0e, 25c7, 4585, e97e, 1425, 2235, b849, 52d6, abc7, 1b52, 0936, 214b, 9ed8, 5943, 1a72, 35a9, 66f6, e6c9, c2a6, fb8a, c94d, c8e1, c6e2, 3fdf, 3ebf, a12e, 1ca6, 5d61, ee72, 0bf7, 724f, 37cb, bbc5, 8e70, ce3c, dda2, 8f9e, dfd0, c199, e175, 9535, 6df6, c270, cd59, a3d5, fc79, fb57, 2898, 7c30, ec64, 2a4f, 2a0f]
[e003, 7bd4, d157, c2ff, 0bce, a088, dc6b, 8777, 3e7d, c3e9, b87e, 552c, 69f6, 74a6, 14ac, 01be, f938, 98ad, c9dc, d712, 229b, 3d0e, 25c7, 4585, e97e, 1425, 2235, b849, 52d6, abc7, 1b52, 0936, 214b, 9ed8, 5943, 1a72, 35a9, 66f6, e6c9, c2a6, fb8a, c94d, c8e1, c6e2, 3fdf, 3ebf, a12e, 1ca6, 5d61, ee72, 0bf7, 724f, 37cb, bbc5, 8e70, ce3c, dda2, 8f9e, dfd0, c199, e175, 9535, 6df6, c270, cd59, a3d5, fc79, fb57, 2898, 7c30, ec64, 2a4f, 2a0f]
[e003, 7bd4, d157, c2ff, 0bce, a088, dc6b, 8777, 3e7d, c3e9, b87e, 552c, 69f6, 74a6, 14ac, 01be, f938, 98ad, c9dc, d712, 229b, 3d0e, 25c7, 4585, e97e, 1425, 2235, b849, 52d6, abc7, 1b52, 0936, 214b, 9ed8, 5943, 1a72, 35a9, 66f6, e6c9, c2a6, fb8a, c94d, c8e1, c6e2, 3fdf, 3ebf, a12e, 1ca6, 5d61, ee72, 0bf7, 724f, 37cb, bbc5, 8e70, ce3c, dda2, 8f9e, dfd0, c199, e175, 9535, 6df6, c270, 7ece, cd59, a3d5, fc79, fb57, 2898, 7c30, ec64, 2a4f, 2a0f]
[e003, 7bd4, d157, c2ff, 0bce, a088, dc6b, 8777, 3e7d, c3e9, b87e, 552c, 69f6, 74a6, 14ac, 01be, f938, 98ad, c9dc, d712, 229b, 3d0e, 25c7, 4585, e97e, 1425, 2235, b849, 52d6, abc7, 1b52, 0936, 214b, 9ed8, 5943, 1a72, 35a9, 66f6, e6c9, c2a6, fb8a, c94d, c8e1, c6e2, 3fdf, 3ebf, a12e, 1ca6, 5d61, ee72, 0bf7, 724f, 37cb, bbc5, 8e70, ce3c, dda2, 8f9e, dfd0, 6b3b, c199, e175, 9535, 6df6, c270, 7ece, cd59, a3d5, fc79, fb57, 2898, 7c30, ec64, 2a4f, 2a0f]
Exception in thread "70" java.util.ConcurrentModificationExceptionat java.base/java.util.HashMap$HashIterator.nextNode(HashMap.java:1597)at java.base/java.util.HashMap$KeyIterator.next(HashMap.java:1620)at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:456)at java.base/java.lang.String.valueOf(String.java:4218)at java.base/java.io.PrintStream.println(PrintStream.java:1047)at com.my.listsafe.HashSetNoSafeTest.lambda$main$0(HashSetNoSafeTest.java:13)at java.base/java.lang.Thread.run(Thread.java:833)
- HashMapNoSafeTest.java,演示 HashMap 类线程安全问题
package com.my.listsafe;import java.util.HashMap;
import java.util.UUID;public class HashMapNoSafeTest {public static void main(String[] args) {HashMap<Object, Object> hashMap = new HashMap<>();for (int i = 0; i < 75; i++) {String s = String.valueOf(i);new Thread(() -> {hashMap.put(s, UUID.randomUUID().toString().substring(0, 4));System.out.println(hashMap);}, "" + i).start();}}
}
- 输出结果
{4=f5de}
{3=441a, 4=f5de}
{3=441a, 4=f5de, 5=67a9}
{2=7293, 3=441a, 4=f5de, 5=67a9}
{0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9}
{0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b}
{0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78}
{0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3}
{0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f}
{0=218a, 11=9548, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f}
{0=218a, 11=9548, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 10=5137}
{0=218a, 11=9548, 12=d79d, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 10=5137}
{11=9548, 12=d79d, 13=1f9d, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 10=5137}
{11=9548, 12=d79d, 13=1f9d, 14=0693, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 10=5137}
{11=9548, 12=d79d, 13=1f9d, 14=0693, 15=6ec2, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 10=5137}
{11=9548, 12=d79d, 13=1f9d, 14=0693, 15=6ec2, 16=961b, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 10=5137}
{11=9548, 12=d79d, 13=1f9d, 14=0693, 15=6ec2, 16=961b, 17=079b, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 10=5137}
{11=9548, 12=d79d, 13=1f9d, 14=0693, 15=6ec2, 16=961b, 17=079b, 18=0411, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 10=5137}
{11=9548, 12=d79d, 13=1f9d, 14=0693, 15=6ec2, 16=961b, 17=079b, 18=0411, 19=1798, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 10=5137}
{11=9548, 12=d79d, 13=1f9d, 14=0693, 15=6ec2, 16=961b, 17=079b, 18=0411, 19=1798, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 10=5137, 21=7caf}
{11=9548, 12=d79d, 13=1f9d, 14=0693, 15=6ec2, 16=961b, 17=079b, 18=0411, 19=1798, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 20=be87, 10=5137, 21=7caf}
{11=9548, 12=d79d, 23=bb19, 13=1f9d, 14=0693, 15=6ec2, 16=961b, 17=079b, 18=0411, 19=1798, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 20=be87, 10=5137, 21=7caf}
{11=9548, 22=8825, 12=d79d, 23=bb19, 13=1f9d, 14=0693, 15=6ec2, 16=961b, 17=079b, 18=0411, 19=1798, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 20=be87, 10=5137, 21=7caf}
{11=9548, 22=8825, 12=d79d, 23=bb19, 13=1f9d, 24=bd34, 14=0693, 15=6ec2, 16=961b, 17=079b, 18=0411, 19=1798, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 20=be87, 10=5137, 21=7caf}
{22=8825, 23=bb19, 24=bd34, 25=64f0, 10=5137, 11=9548, 12=d79d, 13=1f9d, 14=0693, 15=6ec2, 16=961b, 17=079b, 18=0411, 19=1798, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 20=be87, 21=7caf}
{22=8825, 23=bb19, 24=bd34, 25=64f0, 26=f3c1, 10=5137, 11=9548, 12=d79d, 13=1f9d, 14=0693, 15=6ec2, 16=961b, 17=079b, 18=0411, 19=1798, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 20=be87, 21=7caf}
{22=8825, 23=bb19, 24=bd34, 25=64f0, 26=f3c1, 27=9ef2, 10=5137, 11=9548, 12=d79d, 13=1f9d, 14=0693, 15=6ec2, 16=961b, 17=079b, 18=0411, 19=1798, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 20=be87, 21=7caf}
{22=8825, 23=bb19, 24=bd34, 25=64f0, 26=f3c1, 27=9ef2, 29=2c46, 10=5137, 11=9548, 12=d79d, 13=1f9d, 14=0693, 15=6ec2, 16=961b, 17=079b, 18=0411, 19=1798, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 20=be87, 21=7caf}
{22=8825, 23=bb19, 24=bd34, 25=64f0, 26=f3c1, 27=9ef2, 28=dc62, 29=2c46, 10=5137, 11=9548, 12=d79d, 13=1f9d, 14=0693, 15=6ec2, 16=961b, 17=079b, 18=0411, 19=1798, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 20=be87, 21=7caf}
{22=8825, 23=bb19, 24=bd34, 25=64f0, 26=f3c1, 27=9ef2, 28=dc62, 29=2c46, 30=3ddc, 10=5137, 11=9548, 12=d79d, 13=1f9d, 14=0693, 15=6ec2, 16=961b, 17=079b, 18=0411, 19=1798, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 20=be87, 21=7caf}
{22=8825, 23=bb19, 24=bd34, 25=64f0, 26=f3c1, 27=9ef2, 28=dc62, 29=2c46, 30=3ddc, 10=5137, 32=dbef, 11=9548, 12=d79d, 13=1f9d, 14=0693, 15=6ec2, 16=961b, 17=079b, 18=0411, 19=1798, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 20=be87, 21=7caf}
{22=8825, 23=bb19, 24=bd34, 25=64f0, 26=f3c1, 27=9ef2, 28=dc62, 29=2c46, 30=3ddc, 31=acbb, 10=5137, 32=dbef, 11=9548, 12=d79d, 13=1f9d, 14=0693, 15=6ec2, 16=961b, 17=079b, 18=0411, 19=1798, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 20=be87, 21=7caf}
{22=8825, 23=bb19, 24=bd34, 25=64f0, 26=f3c1, 27=9ef2, 28=dc62, 29=2c46, 30=3ddc, 31=acbb, 10=5137, 32=dbef, 11=9548, 12=d79d, 34=de5f, 13=1f9d, 14=0693, 15=6ec2, 16=961b, 17=079b, 18=0411, 19=1798, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 20=be87, 21=7caf}
{22=8825, 23=bb19, 24=bd34, 25=64f0, 26=f3c1, 27=9ef2, 28=dc62, 29=2c46, 30=3ddc, 31=acbb, 10=5137, 32=dbef, 11=9548, 12=d79d, 34=de5f, 13=1f9d, 35=372e, 14=0693, 15=6ec2, 16=961b, 17=079b, 18=0411, 19=1798, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 20=be87, 21=7caf}
{22=8825, 23=bb19, 24=bd34, 25=64f0, 26=f3c1, 27=9ef2, 28=dc62, 29=2c46, 30=3ddc, 31=acbb, 10=5137, 32=dbef, 11=9548, 12=d79d, 34=de5f, 13=1f9d, 35=372e, 14=0693, 36=50c6, 15=6ec2, 16=961b, 17=079b, 18=0411, 19=1798, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 20=be87, 21=7caf}
{22=8825, 23=bb19, 24=bd34, 25=64f0, 26=f3c1, 27=9ef2, 28=dc62, 29=2c46, 30=3ddc, 31=acbb, 10=5137, 32=dbef, 11=9548, 12=d79d, 34=de5f, 13=1f9d, 35=372e, 14=0693, 36=50c6, 15=6ec2, 37=a463, 16=961b, 17=079b, 18=0411, 19=1798, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 20=be87, 21=7caf}
{22=8825, 23=bb19, 24=bd34, 25=64f0, 26=f3c1, 27=9ef2, 28=dc62, 29=2c46, 30=3ddc, 31=acbb, 10=5137, 32=dbef, 11=9548, 12=d79d, 34=de5f, 13=1f9d, 35=372e, 14=0693, 36=50c6, 15=6ec2, 37=a463, 16=961b, 17=079b, 39=810e, 18=0411, 19=1798, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 20=be87, 21=7caf}
{22=8825, 23=bb19, 24=bd34, 25=64f0, 26=f3c1, 27=9ef2, 28=dc62, 29=2c46, 30=3ddc, 31=acbb, 10=5137, 32=dbef, 11=9548, 12=d79d, 34=de5f, 13=1f9d, 35=372e, 14=0693, 36=50c6, 15=6ec2, 37=a463, 16=961b, 38=e20f, 17=079b, 39=810e, 18=0411, 19=1798, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 40=169b, 20=be87, 21=7caf}
{22=8825, 23=bb19, 24=bd34, 25=64f0, 26=f3c1, 27=9ef2, 28=dc62, 29=2c46, 30=3ddc, 31=acbb, 10=5137, 32=dbef, 11=9548, 12=d79d, 34=de5f, 13=1f9d, 35=372e, 14=0693, 36=50c6, 15=6ec2, 37=a463, 16=961b, 38=e20f, 17=079b, 39=810e, 18=0411, 19=1798, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 40=169b, 41=e33f, 20=be87, 21=7caf}
{22=8825, 23=bb19, 24=bd34, 25=64f0, 26=f3c1, 27=9ef2, 28=dc62, 29=2c46, 30=3ddc, 31=acbb, 10=5137, 32=dbef, 11=9548, 12=d79d, 34=de5f, 13=1f9d, 35=372e, 14=0693, 36=50c6, 15=6ec2, 37=a463, 16=961b, 38=e20f, 17=079b, 39=810e, 18=0411, 19=1798, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 40=169b, 41=e33f, 20=be87, 42=bf19, 21=7caf}
{22=8825, 23=bb19, 24=bd34, 25=64f0, 26=f3c1, 27=9ef2, 28=dc62, 29=2c46, 30=3ddc, 31=acbb, 10=5137, 32=dbef, 11=9548, 12=d79d, 34=de5f, 13=1f9d, 35=372e, 14=0693, 36=50c6, 15=6ec2, 37=a463, 16=961b, 38=e20f, 17=079b, 39=810e, 18=0411, 19=1798, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 40=169b, 41=e33f, 20=be87, 42=bf19, 21=7caf, 43=ca52}
{22=8825, 44=bed6, 23=bb19, 24=bd34, 25=64f0, 26=f3c1, 27=9ef2, 28=dc62, 29=2c46, 30=3ddc, 31=acbb, 10=5137, 32=dbef, 11=9548, 12=d79d, 34=de5f, 13=1f9d, 35=372e, 14=0693, 36=50c6, 15=6ec2, 37=a463, 16=961b, 38=e20f, 17=079b, 39=810e, 18=0411, 19=1798, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 40=169b, 41=e33f, 20=be87, 42=bf19, 21=7caf, 43=ca52}
{22=8825, 44=bed6, 23=bb19, 24=bd34, 46=44ad, 25=64f0, 26=f3c1, 27=9ef2, 28=dc62, 29=2c46, 30=3ddc, 31=acbb, 10=5137, 32=dbef, 11=9548, 12=d79d, 34=de5f, 13=1f9d, 35=372e, 14=0693, 36=50c6, 15=6ec2, 37=a463, 16=961b, 38=e20f, 17=079b, 39=810e, 18=0411, 19=1798, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 40=169b, 41=e33f, 20=be87, 42=bf19, 21=7caf, 43=ca52}
{22=8825, 44=bed6, 23=bb19, 45=61c0, 24=bd34, 46=44ad, 25=64f0, 26=f3c1, 27=9ef2, 28=dc62, 29=2c46, 30=3ddc, 31=acbb, 10=5137, 32=dbef, 11=9548, 12=d79d, 34=de5f, 13=1f9d, 35=372e, 14=0693, 36=50c6, 15=6ec2, 37=a463, 16=961b, 38=e20f, 17=079b, 39=810e, 18=0411, 19=1798, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 40=169b, 41=e33f, 20=be87, 42=bf19, 21=7caf, 43=ca52}
{22=8825, 44=bed6, 23=bb19, 45=61c0, 24=bd34, 46=44ad, 25=64f0, 47=9fc7, 26=f3c1, 27=9ef2, 28=dc62, 29=2c46, 30=3ddc, 31=acbb, 10=5137, 32=dbef, 11=9548, 12=d79d, 34=de5f, 13=1f9d, 35=372e, 14=0693, 36=50c6, 15=6ec2, 37=a463, 16=961b, 38=e20f, 17=079b, 39=810e, 18=0411, 19=1798, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 40=169b, 41=e33f, 20=be87, 42=bf19, 21=7caf, 43=ca52}
{22=8825, 44=bed6, 23=bb19, 45=61c0, 24=bd34, 46=44ad, 25=64f0, 47=9fc7, 26=f3c1, 48=8408, 27=9ef2, 28=dc62, 29=2c46, 30=3ddc, 31=acbb, 10=5137, 32=dbef, 11=9548, 12=d79d, 34=de5f, 13=1f9d, 35=372e, 14=0693, 36=50c6, 15=6ec2, 37=a463, 16=961b, 38=e20f, 17=079b, 39=810e, 18=0411, 19=1798, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 40=169b, 41=e33f, 20=be87, 42=bf19, 21=7caf, 43=ca52}
{22=8825, 44=bed6, 23=bb19, 45=61c0, 24=bd34, 46=44ad, 25=64f0, 47=9fc7, 26=f3c1, 48=8408, 27=9ef2, 49=9a06, 28=dc62, 29=2c46, 30=3ddc, 31=acbb, 10=5137, 32=dbef, 11=9548, 12=d79d, 34=de5f, 13=1f9d, 35=372e, 14=0693, 36=50c6, 15=6ec2, 37=a463, 16=961b, 38=e20f, 17=079b, 39=810e, 18=0411, 19=1798, 0=218a, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 40=169b, 41=e33f, 20=be87, 42=bf19, 21=7caf, 43=ca52}
{44=bed6, 45=61c0, 46=44ad, 47=9fc7, 48=8408, 49=9a06, 10=5137, 11=9548, 12=d79d, 13=1f9d, 14=0693, 15=6ec2, 16=961b, 17=079b, 18=0411, 19=1798, 0=218a, 1=0dd1, 2=7293, 3=441a, 4=f5de, 5=67a9, 6=5c3b, 7=9f78, 8=e7b3, 9=f21f, 20=be87, 21=7caf, 22=8825, 23=bb19, 24=bd34, 25=64f0, 26=f3c1, 27=9ef2, 28=dc62, 29=2c46, 30=3ddc, 31=acbb, 32=dbef, 33=3d57, 34=de5f, 35=372e, 36=50c6, 37=a463, 38=e20f, 39=810e, 40=169b, 41=e33f, 42=bf19, 43=ca52}
Exception in thread "38" java.util.ConcurrentModificationExceptionat java.base/java.util.HashMap$HashIterator.nextNode(HashMap.java:1597)at java.base/java.util.HashMap$EntryIterator.next(HashMap.java:1630)at java.base/java.util.HashMap$EntryIterator.next(HashMap.java:1628)at java.base/java.util.AbstractMap.toString(AbstractMap.java:550)at java.base/java.lang.String.valueOf(String.java:4218)at java.base/java.io.PrintStream.println(PrintStream.java:1047)at com.my.listsafe.HashMapNoSafeTest.lambda$main$0(HashMapNoSafeTest.java:14)at java.base/java.lang.Thread.run(Thread.java:833)
Exception in thread "1" java.util.ConcurrentModificationExceptionat java.base/java.util.HashMap$HashIterator.nextNode(HashMap.java:1597)at java.base/java.util.HashMap$EntryIterator.next(HashMap.java:1630)at java.base/java.util.HashMap$EntryIterator.next(HashMap.java:1628)at java.base/java.util.AbstractMap.toString(AbstractMap.java:550)at java.base/java.lang.String.valueOf(String.java:4218)at java.base/java.io.PrintStream.println(PrintStream.java:1047)at com.my.listsafe.HashMapNoSafeTest.lambda$main$0(HashMapNoSafeTest.java:14)at java.base/java.lang.Thread.run(Thread.java:833)
四、HashSet 、HashMap 类线程安全问题处理方案
1、CopyOnWriteArraySet 类
(1)基本介绍
- CopyOnWriteArraySet 类采用读写分离思想,用于处理 HashSet 类线程安全问题
(2)演示
- CopyOnWriteArraySetTest 类
package com.my.listsafe;import java.util.UUID;
import java.util.concurrent.CopyOnWriteArraySet;public class CopyOnWriteArraySetTest {public static void main(String[] args) {CopyOnWriteArraySet<Object> copyOnWriteArraySet = new CopyOnWriteArraySet<>();for (int i = 0; i < 50; i++) {new Thread(() -> {copyOnWriteArraySet.add(UUID.randomUUID().toString().substring(0, 4));System.out.println(copyOnWriteArraySet);}, "" + i).start();}}
}
2、ConcurrentHashMap 类
(1)基本介绍
- ConcurrentHashMap 类用于处理 HashMap 类线程安全问题
(2)演示
- ConcurrentHashMapTest 类
package com.my.listsafe;import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;public class ConcurrentHashMapTest {public static void main(String[] args) {ConcurrentHashMap<Object, Object> concurrentHashMap = new ConcurrentHashMap<>();for (int i = 0; i < 75; i++) {String s = String.valueOf(i);new Thread(() -> {concurrentHashMap.put(s, UUID.randomUUID().toString().substring(0, 4));System.out.println(concurrentHashMap);}, "" + 1).start();}}
}