一、多线程List集合不安全
1.1、List集合不安全案例代码
/**
* @Author : 一叶浮萍归大海
* @Date: 2023/11/20 12:38
* @Description: 多线层环境下List集合不安全案例代码
*/
public class NotSafeListMainApp {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
for (int i = 1; i <= 30; i++) {
new Thread(() -> {
list.add(UUID.randomUUID().toString().toLowerCase().substring(0, 8).replaceAll("-", ""));
System.out.println("【当前线程】:" + Thread.currentThread().getName() + ",【当前list】:" + list);
}, String.valueOf(i)).start();
}
}
}
1.2、解决方法
/**
* @Author : 一叶浮萍归大海
* @Date: 2023/11/20 12:38
* @Description: 多线层环境下List集合不安全解决案例代码
*/
public class NotSafeListPlusMainApp {
public static void main(String[] args) {
// List<String> list = Collections.synchronizedList(new ArrayList<>());
List<String> list = new CopyOnWriteArrayList<>();
for (int i = 1; i <= 30; i++) {
new Thread(() -> {
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集合不安全案例代码
/**
* @Author : 一叶浮萍归大海
* @Date: 2023/11/20 12:38
* @Description: 多线层环境下HashSet集合不安全案例代码
*/
public class NotSafeHashSetMainApp {
public static void main(String[] args) {
Set<String> hashSet = new HashSet<>();
for (int i = 1; i <= 30; i++) {
new Thread(() -> {
hashSet.add(UUID.randomUUID().toString().toLowerCase().substring(0, 8).replaceAll("-", ""));
System.out.println("【当前线程】:" + Thread.currentThread().getName() + ",【当前hashSet】:" + hashSet);
}, String.valueOf(i)).start();
}
}
}
2.2、解决方法
/**
* @Author : 一叶浮萍归大海
* @Date: 2023/11/20 12:38
* @Description: 多线层环境下HashSet集合不安全解决案例代码
*/
public class NotSafeHashSetPlusMainApp {
public static void main(String[] args) {
// Set<String> hashSet = Collections.synchronizedSet(new HashSet<>());
Set<String> hashSet = new CopyOnWriteArraySet<>();
for (int i = 1; i <= 30; i++) {
new Thread(() -> {
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集合不安全案例代码
/**
* @Author : 一叶浮萍归大海
* @Date: 2023/11/20 12:38
* @Description: 多线层环境下HashMap集合不安全案例代码
*/
public class NotSafeHashMapMainApp {
public static void main(String[] args) {
HashMap<String,Object> hashMap = new HashMap<>();
for (int i = 1; i <= 30; i++) {
new Thread(() -> {
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、解决方法
/**
* @Author : 一叶浮萍归大海
* @Date: 2023/11/20 12:38
* @Description: 多线层环境下HashMap集合不安全解决案例代码
*/
public class NotSafeHashMapPlusMainApp {
public static void main(String[] args) {
// Map<String,Object> hashMap = Collections.synchronizedMap(new HashMap<>());
Map<String,Object> hashMap = new ConcurrentHashMap<>();
for (int i = 1; i <= 30; i++) {
new Thread(() -> {
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();
}
}
}