Java Enum 值子集线程安全

标签 java enums thread-safety

Possible Duplicate:
How thread-safe is enum in java?

让有一个enum类如

public enum Type
{
    ONE, TWO, THREE, FOUR
}

Type.values()数组线程可以安全地在 for 中访问循环,例如在静态方法中?例如:

public static void process()
{
    for (Type type:Type.values())
    {
        // Do something
    }
}

此外,如果使用这些值的任何子集定义静态数组变量,那么读取是否是线程安全的?例如:

public static final Type[] TYPES = new Type[] {TWO, THREE};

public static void process()
{
    for (Type type:TYPES)
    {
        // Do something
    }
}

在这两种情况下,process()方法可能属于与 Type 的定义不同的类enumtypes数组。

此外,TYPES数组可以在 Type 中定义一次enum并由 enum 的静态方法返回.

因此,鉴于上述情况,如果多个线程正在运行 process()方法同时执行,代码是否线程安全(至少对于读取 TYPES 数组的值)?

最佳答案

方法Type.values()每次都会返回一个新数组。这样做是因为数组是可变的,并且每次都必须返回一个新副本才能保证线程安全。

关于Java Enum 值子集线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11401062/

相关文章:

c# - 混淆 C# 枚举和显式转换

java - 如何暂停其他正在进行的流读取器线程

java - 序列号的模式匹配算法

java - JWindow 在显示图像之前显示空白一秒钟

java - 如何在 Hibernate 中正确使用 clear()、evict() 和 close() 方法?

java - 如何让 Jbutton 填充 JPanel 以便按钮之间没有空格?

java - 如何创建 Java 类或枚举的别名?

objective-c - 初始化枚举值时出错

java - jBCrypt 0.3 是线程安全的吗?

c++ - 具有两个线程的 STL 队列(生产者、消费者)