gpt4 book ai didi

Java Enum 静态方法线程安全?

转载 作者:搜寻专家 更新时间:2023-11-01 01:31:08 25 4
gpt4 key购买 nike

我有一个用例,其中迭代 Java 枚举和测试,参数包含在枚举列表中,它是一个静态方法,这个线程安全吗?

public enum EnumType {

ONE,
TWO,
THREE,
FOUR,
FIVE;

public static boolean isValid(String input) {
for (EnumType type : EnumType.values()) {
if (input.equals(type.toString())) {
return true;
}
}
return false;
}
}

最佳答案

EnumType.values() 返回所有枚举常量的副本,因此即使您修改 values() 返回的数组,它也不会影响任何其他线程.

字节码证实了这一点:

public static values()[Lcom/example/EnumType;
L0
LINENUMBER 43 L0
GETSTATIC com/example/EnumType.$VALUES : [Lcom/example/EnumType;
INVOKEVIRTUAL [Lcom/example/EnumType;.clone ()Ljava/lang/Object;
CHECKCAST [Lcom/example/EnumType;
ARETURN
MAXSTACK = 1
MAXLOCALS = 0

行:

INVOKEVIRTUAL [Lcom/example/EnumType;.clone ()Ljava/lang/Object;

调用 Array.clone() 方法,返回数组的浅拷贝

关于Java Enum 静态方法线程安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55489510/

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