gpt4 book ai didi

java - 只读 EnumSet 迭代器线程安全吗?

转载 作者:行者123 更新时间:2023-11-30 11:13:29 25 4
gpt4 key购买 nike

我有一个 EnumSet,它是最终的和不可变的,即在构造函数中初始化一次。

EnumSet 线程上的 contains() 方法是否安全?它在内部使用迭代器进行包含检查。因此,如果两个线程同时调用 contains(),一个调用中的迭代器位置是否会影响另一个调用?还是迭代器在这两个线程调用中具有不同的实例?

最佳答案

EnumSet内容可以更改,尽管对它的引用是最终的。没有 EnumSet 是不可变的。但是,您可以通过 Collections.unmodifiableSet() 包装您的 EnumSet。如果您还避免保留对原始 EnumSet 的任何引用,则不可修改的包装对象在功能上是不可变的。

尽管存在可变性,但只要 Set 未被修改,两个迭代器同时对同一 Set 进行操作就不会出现问题。这与只有一个迭代器的情况并没有什么不同。

在任何情况下,EnumSetcontains() 方法可能不会创建或使用迭代器。该类通过位 vector 实现成员资格,因此它使用位运算来执行 contains() 测试。

关于java - 只读 EnumSet 迭代器线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26409869/

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