一、多线程List集合不安全
1.1、List集合不安全案例代码
public class NotSafeListMainApp {
public static void main(String[] args) {
List list = new ArrayList<>();
for (int i = 1; i <= 30; i++) {
list.add(UUID.randomUUID().toString().toLowerCase().substring(0, 8).replaceAll("-", ""));
System.out.println("【当前线程】:" + Thread.currentThread().getName() + ",【当前list】:" + list);
}, String.valueOf(i)).start();
1.2、解决方法
public class NotSafeListPlusMainApp {
public static void main(String[] args) {
List list = new CopyOnWriteArrayList<>();
for (int i = 1; i <= 30; i++) {
list.add(UUID.randomUUID().toString().toLowerCase().substring(0, 8).replaceAll("-", ""));
System.out.println("【当前线程】:" + Thread.currentThread().getName() + ",【当前list】:" + list);
}, String.valueOf(i)).start();
二、多线程HashSet集合不安全
2.1、HashSet集合不安全案例代码
public class NotSafeHashSetMainApp {
public static void main(String[] args) {
Set hashSet = new HashSet<>();
for (int i = 1; i <= 30; i++) {
hashSet.add(UUID.randomUUID().toString().toLowerCase().substring(0, 8).replaceAll("-", ""));
System.out.println("【当前线程】:" + Thread.currentThread().getName() + ",【当前hashSet】:" + hashSet);
}, String.valueOf(i)).start();
2.2、解决方法
public class NotSafeHashSetPlusMainApp {
public static void main(String[] args) {
Set hashSet = new CopyOnWriteArraySet<>();
for (int i = 1; i <= 30; i++) {
hashSet.add(UUID.randomUUID().toString().toLowerCase().substring(0, 8).replaceAll("-", ""));
System.out.println("【当前线程】:" + Thread.currentThread().getName() + ",【当前hashSet】:" + hashSet);
}, String.valueOf(i)).start();
三、多线程HashMap集合不安全
3.1、HashMap集合不安全案例代码
public class NotSafeHashMapMainApp {
public static void main(String[] args) {
HashMap hashMap = new HashMap<>();
for (int i = 1; i <= 30; i++) {
hashMap.put(UUID.randomUUID().toString().substring(0, 1),UUID.randomUUID().toString().toLowerCase().substring(0, 8).replaceAll("-", ""));
System.out.println("【当前线程】:" + Thread.currentThread().getName() + ",【当前hashMap】:" + hashMap);
}, String.valueOf(i)).start();
3.2、解决方法
public class NotSafeHashMapPlusMainApp {
public static void main(String[] args) {
Map hashMap = new ConcurrentHashMap<>();
for (int i = 1; i <= 30; i++) {
hashMap.put(UUID.randomUUID().toString().substring(0, 1),UUID.randomUUID().toString().toLowerCase().substring(0, 8).replaceAll("-", ""));
System.out.println("【当前线程】:" + Thread.currentThread().getName() + ",【当前hashMap】:" + hashMap);
}, String.valueOf(i)).start();