脚本宝典收集整理的这篇文章主要介绍了JUC并发编程快速入门篇(三)—— 集合的线程安全,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
/*
list集合线程安全
*/
public class ThreadDemo4 {
public static void main(String[] args) {
//创建ArrayList集合
// List<String> list = new ArrayList<>(); //不安全
// List<String> list= new Vector<>(); //效率低
// List<String> list = Collections.synchronizedList(new ArrayList<>()); //不推荐使用
List<String> list = new CopyOnWriteArrayList<>(); //推荐使用(重点)
for (int i = 0; i < 10; i++) {
new Thread(()->{
//向集合中添加内容
list.add(UUID.randomUUID().toString().substring(0,8));
//从集合中获取内容
System.out.println(list);
},String.valueOf(i)).start();
}
}
}
public class ThreadHashSet {
public static void main(String[] args) {
// Set<String> set = new HashSet<>(); //线程不安全
Set<String> set = new CopyOnWriteArraySet<>(); //线程安全
for (int i = 0; i < 10; i++) {
new Thread(()->{
//向集合中添加内容
set.add(UUID.randomUUID().toString().substring(0, 8));
//从集合中获取内容
System.out.println(set);
},String.valueOf(i)).start();
}
}
}
public class ThreadMap {
public static void main(String[] args) {
// Map<String, String> map = new HashMap<>(); //线程不安全
Map<String, String> map = new ConcurrentHashMap(); //线程安全
for (int i = 0; i < 10; 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();
}
}
}
1.线程安全与线程不安全集合
集合类型中存在线程安全与线程不安全的两种,常见例如:
ArrayList ----- Vector
HashMap -----HashTable
但是以上都是通过 synchronized 关键字实现,效率较低
2.Collections 构建的线程安全集合
3.java.util.concurrent 并发包下
CopyOnWriteArrayList CopyOnWriteArraySet 类型,通过动态数组与线程安全个方面保证线程安全
以上是脚本宝典为你收集整理的JUC并发编程快速入门篇(三)—— 集合的线程安全全部内容,希望文章能够帮你解决JUC并发编程快速入门篇(三)—— 集合的线程安全所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。