Java集合(List、Set、Map)的不安全性体现在哪些方面?
- 内容介绍
- 文章标签
- 相关推荐
本文共计3120个文字,预计阅读时间需要13分钟。
我们深知多线程环境下会存在各种不安全的问题,也了解了一些基本的解决方案。以下对出现错误的情况进行一个实际模拟,以联想整体的生产环境。一、List的不安全1.1 问题
我们已经知道多线程下会有各种不安全的问题,都知道并发的基本解决方案,这里对出现错误的情况进行一个实际模拟,以此能够联想到具体的生产环境中。
一、List 的不安全
1.1 问题
看一段代码:
public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); for (int i = 0; i < 3; i++){ new Thread(()->{ list.add(UUID.randomUUID().toString().substring(0,8)); System.out.println(list); },String.valueOf(i)).start(); } }
过程很简单,只有 3 个线程而已,对同一个 list 进行 add 的写操作,并随后进行输出的读操作。
输出结果,多执行几次,惊喜多多。
那么,情况不严重的时候,这里显然还正常运行结束了,只是导致了还没来得及写的时候,就已经读出了数据。
本文共计3120个文字,预计阅读时间需要13分钟。
我们深知多线程环境下会存在各种不安全的问题,也了解了一些基本的解决方案。以下对出现错误的情况进行一个实际模拟,以联想整体的生产环境。一、List的不安全1.1 问题
我们已经知道多线程下会有各种不安全的问题,都知道并发的基本解决方案,这里对出现错误的情况进行一个实际模拟,以此能够联想到具体的生产环境中。
一、List 的不安全
1.1 问题
看一段代码:
public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); for (int i = 0; i < 3; i++){ new Thread(()->{ list.add(UUID.randomUUID().toString().substring(0,8)); System.out.println(list); },String.valueOf(i)).start(); } }
过程很简单,只有 3 个线程而已,对同一个 list 进行 add 的写操作,并随后进行输出的读操作。
输出结果,多执行几次,惊喜多多。
那么,情况不严重的时候,这里显然还正常运行结束了,只是导致了还没来得及写的时候,就已经读出了数据。

