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
的定义不同的类enum
和 types
数组。
此外,TYPES
数组可以在 Type
中定义一次enum
并由 enum
的静态方法返回.
因此,鉴于上述情况,如果多个线程正在运行 process()
方法同时执行,代码是否线程安全(至少对于读取 TYPES
数组的值)?
最佳答案
方法Type.values()
每次都会返回一个新数组。这样做是因为数组是可变的,并且每次都必须返回一个新副本才能保证线程安全。
关于Java Enum 值子集线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11401062/