Java集合(List、Set、Map)的不安全性体现在哪些方面?

2026-05-15 23:150阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计3120个文字,预计阅读时间需要13分钟。

Java集合(List、Set、Map)的不安全性体现在哪些方面?

我们深知多线程环境下会存在各种不安全的问题,也了解了一些基本的解决方案。以下对出现错误的情况进行一个实际模拟,以联想整体的生产环境。一、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分钟。

Java集合(List、Set、Map)的不安全性体现在哪些方面?

我们深知多线程环境下会存在各种不安全的问题,也了解了一些基本的解决方案。以下对出现错误的情况进行一个实际模拟,以联想整体的生产环境。一、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 的写操作,并随后进行输出的读操作。

输出结果,多执行几次,惊喜多多。

那么,情况不严重的时候,这里显然还正常运行结束了,只是导致了还没来得及写的时候,就已经读出了数据。

阅读全文