Java多线程集合类

代码纪元 后端 2024-11-15

Java多线程集合类

异常代码:java

代码解读
复制代码
public class ListTest { public static void main(String[] args) { List<Object> list = new ArrayList<>(); for (Integer i = 0; i < 10; i++) { new Thread(()->{ list.add(UUID.randomUUID().toString().substring(0,5)); System.out.println(list); },i.toString()).start(); } } }

解决办法:使用线程安全类copyOnWrite就是写入时复制,简称COW,是计算机程序设计中的一个优化策略CopyOnWriteArrayList原理:现成不安全的ArrayList在多线程添加的时候,会造成多个线程同时写入1下标的值,导致覆盖报错。CopyOnWriteArrayList是写入的时候复制多个List,最后再合并。

copyOnWriteArrayList比vector的优势在于,vector是synchronized实现的,效率相对低,CoptyOnWriteArrayList是使用Lock锁实现的。

copyOnWriteArrayList是List的现成安全类java

代码解读
复制代码
public class ListTest { public static void main(String[] args) { // 使用juc的CopyOnWriteArrayList类,它是线程安全的 List<Object> list = new CopyOnWriteArrayList<>(); for (Integer i = 0; i < 10; i++) { new Thread(()->{ list.add(UUID.randomUUID().toString().substring(0,5)); System.out.println(list); },i.toString()).start(); } } }

OverOnWriteArraySet是HashSet的安全类java

代码解读
复制代码
public static void main(String[] args) { Set<String> set = new CopyOnWriteArraySet<>(); for (Integer i = 0; i < 50; i++) { new Thread(()->{ String uid = UUID.randomUUID().toString(); set.add(uid); System.out.println(set); },i.toString()).start(); } }

ConCurrentHashMap类是HashMap的安全类java

代码解读
复制代码
public class MapTest { public static void main(String[] args) { Map<String,String> map = new ConcurrentHashMap<>(); for (Integer i = 0; i < 50; i++) { new Thread(()->{ String uid = UUID.randomUUID().toString(); map.put(uid,uid); System.out.println(map); },i.toString()).start(); } } }

转载来源:https://juejin.cn/post/7425974185320644635

Apipost 私有化火热进行中

评论