当前位置: 首页 > 面试题库 >

Java集合的不可修改包装器会使它们线程安全吗?

严项明
2023-03-14
问题内容

我需要使ArrayLists线程的ArrayList安全。我也不能让客户对集合进行更改。不可修改的包装器会使其线程安全吗,或者我需要在集合上使用两个包装器?


问题答案:

这取决于。包装器只会阻止对其包装的集合进行更改,而不是对集合中的对象进行更改。如果您有一个ArrayLists的ArrayList,则全局列表及其每个元素列表都需要单独包装,并且您可能还需要为这些列表的内容做些事情。最后,您必须确保原始列表对象没有更改,因为包装器仅阻止通过包装器引用而不是原始对象的更改。

在这种情况下,您不需要同步包装器。



 类似资料:
  • 问题内容: 我正在学习使用HikariCP(我是Java的新手),我找到了一个包装器,但我认为这不是线程安全性,那么单例的实例是线程安全性,而不是方法getConnection()。该类是这样的: 好吧,我需要将参数发送到HikariConfig或HikariDataSource,所以我以这种方式重新编写了它: 我用这种方式: 但是我没有Java方面的经验,所以我需要您的建议。一流(原始)线程安全

  • 考虑一个无状态EJB 从EJB3.1规范中 容器将支持并发执行的会话 bean的许多实例;但是,每个实例只看到一个 序列化的方法调用序列。因此,有状态或 无状态会话bean不必被编码为可重入的 因此无状态seession bean一次最多只能“服务”一个请求,这通常是由管理bean池的容器实现的。这一切的伟大目标是线程安全。 我的问题是为什么我们需要这种形式的线程安全?我的意思是Spring be

  • 问题内容: 我在下面有此代码,并且通过执行以下行来获取ConcurrentModificationException: 代码: 堆栈是: 恰好在foreach行上: 我不明白为什么会发生此错误,因为我没有修改列表。 问题答案: 要知道,是 不是抄袭 收集数据,但只有包装原始集合在一个特殊的包装。因此,如果您修改原始集合,则会出现此错误。 如果要创建真正独立的不可修改的集合实例:

  • Vector:就比Arraylist多了个同步化机制(线程安全)。 Stack:栈,也是线程安全的,继承于Vector。 Hashtable:就比Hashmap多了个线程安全。 ConcurrentHashMap:是一种高效但是线程安全的集合。

  • 问题内容: 假设我有一个Integer列表,并且我在列表上使用Java 8 forEach方法将其值加倍。说我有以下代码: 至于forEach方法,请使用Consumer并调用它接受方法。我在上面的代码运行后打印列表,原始列表没有变化。 据我了解,Stream不会改变源,但在这里我只是在每个元素上调用accept方法。 谢谢你在advace 问题答案: forEach不更改列表的原因归结为规范:

  • 本文向大家介绍哪些集合类是线程安全的?相关面试题,主要包含被问及哪些集合类是线程安全的?时的应答技巧和注意事项,需要的朋友参考一下 Vector、Hashtable、Stack 都是线程安全的,而像 HashMap 则是非线程安全的,不过在 JDK 1.5 之后随着 Java. util. concurrent 并发包的出现,它们也有了自己对应的线程安全类,比如 HashMap 对应的线程安全类就