gpt4 book ai didi

java - 哈希表中的并发性和故障安全行为

转载 作者:行者123 更新时间:2023-11-30 04:24:49 26 4
gpt4 key购买 nike

我正在阅读有关哈希表的内容,这个问题引起了我的注意。哈希表是同步的,那么哈希表上的迭代器是否是故障安全的?

此外,对于故障安全集合,当多个线程尝试访问集合时,您不会收到 ConcurrentModificationException,因为每个线程都在处理自己的副本。我想知道这是否意味着在内存中为每个线程创建了 Collection 的实际物理副本?

最佳答案

嗯...如果“故障安全”意味着您无法获得 ConcurrentModificationException,那么答案是否定的。您可以得到这个当您在其上使用 Iterator 时,Hashtable 会出现异常。 javadoc明确指出。

<小时/>

Also, for fail-safe Collections, when multiple threads try to access a Collection, you won't get a ConcurrentModificationException because each thread is working on its own copy of it.

(你似乎是从某处引用或总结的。无论如何,我认为这是不准确的。)

I was wondering does this mean, that an actual physical copy of the Collection is created in the memory for each thread?

在某些情况下,迭代器正在处理不会被修改的副本。在其他情况下,迭代器正在处理一些可以修改的东西和/或根本不代表集合的一致快照的东西。这实际上取决于如何为您正在讨论的特定集合类指定“故障安全”行为。 (集合类的好处之一是它们清楚地指定了您可以依赖什么和不能依赖什么。您只需仔细阅读规范即可确保您真正理解它们!!)

<小时/>

Oh, so the iterator in Hashtable is fail-fast but the enumerator is fail-safe.

第一部分是正确的。第二个错误。

Hashtable 返回的 Enumeration 对象不保证是故障安全的。什么是javadocs状态是枚举不是快速失败的。当您修改Hashtable并同时枚举它时,实际发生的情况未指定。 (如果您确实想知道,请查看您正在使用的特定 Java 版本的源代码。)

关于java - 哈希表中的并发性和故障安全行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16205443/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com