前言
什么是线程不安全及其具体解析
https://blog.csdn.net/shadow___h/article/details/111461834
解决集合的线程不安全问题,主要是用到写时复制
技术
一、ArrayList解决线程安全
核心代码
List list = new CopyOnWriteArrayList<>();
package com.juc;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* @author niuben
*/
public class Demo {
public static void main(String[] args) {
//Vector解决
//List<String> list = new Vector<>();
//Collections解决
//List<String> list = Collections.synchronizedList(new ArrayList<>());
//CopyOnWriteArrayList解决
//写时复制
List<String> list = new CopyOnWriteArrayList<>();
for (int i = 0; i < 30; i++) {
new Thread(() -> {
//添加信息
list.add(UUID.randomUUID().toString().substring(0,8));
//打印
System.out.println(list);
},String.valueOf(i)).start();
}
}
}
一、HashSet解决线程安全
核心代码
Set set = new CopyOnWriteArraySet<>();
package com.juc;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.CopyOnWriteArraySet;
/**
* @author niuben
*/
public class Demo {
public static void main(String[] args) {
//CopyOnWriteArraySet解决
//写时复制
Set<String> set = new CopyOnWriteArraySet<>();
for (int i = 0; i < 30; i++) {
new Thread(() -> {
//添加信息
set.add(UUID.randomUUID().toString().substring(0,8));
//打印
System.out.println(set);
},String.valueOf(i)).start();
}
}
}
一、HashMap解决线程安全
核心代码
== Map<String,String> map = new ConcurrentHashMap<>();==
package com.juc;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.CopyOnWriteArraySet;
/**
* @author niuben
*/
public class Demo {
public static void main(String[] args) {
//ConcurrentHashMap解决
//写时复制
Map<String,String> map = new ConcurrentHashMap<>();
for (int i = 0; i < 30; i++) {
String key = String.valueOf(i);
new Thread(() -> {
//添加信息
map.put(key,UUID.randomUUID().toString().substring(0,8));
//打印
System.out.println(map);
},String.valueOf(i)).start();
}
}
}