Java 此枚举方法是线程安全的吗?

Java 此枚举方法是线程安全的吗?,java,enums,thread-safety,Java,Enums,Thread Safety,这个枚举代码是线程安全的吗 enum One{ IONE; public mone(){ // some code } } 当上述代码不是thrad安全时?一个枚举值保证在使用前仅由一个线程初始化一次。但是,添加到枚举类的方法没有任何线程安全保证。如果您有一个枚举,因此方法不会更改其状态,那么根据定义,只要方法本身是线程安全的,它们就是线程安全的 对枚举进行特殊处理: 它们在类加载时初始化(这就是为什么可以在注释中使用它们) 它们总是最终的 枚举值总是

这个枚举代码是线程安全的吗

enum One{
    IONE;
    public mone(){
        // some code
    }
}

当上述代码不是thrad安全时?

一个枚举值保证在使用前仅由一个线程初始化一次。但是,添加到枚举类的方法没有任何线程安全保证。如果您有一个枚举,因此方法不会更改其状态,那么根据定义,只要方法本身是线程安全的,它们就是线程安全的

对枚举进行特殊处理:

  • 它们在类加载时初始化(这就是为什么可以在注释中使用它们)
  • 它们总是
    最终的
  • 枚举值总是
    静态final

    • One
      枚举中没有共享数据,并且
      mone
      中的所有变量(需要返回类型)都是本地变量。因此,这完全取决于
      mone
      的内容。如果该方法在其他类中使用带状态的单例,则可能会出现问题。

      此代码不执行任何操作,因此是的。此代码无法编译。给
      mone
      一个返回类型。看看这个:如果没有实例变量,即使它有方法,它也是线程安全的吗?你能用代码解释更多关于这一点吗?——“如果方法在其他类中使用带状态的单例,你可能会有问题。”对不起,我输入的错误太多了。Joshua Bloch在《高效Java》中推广的enum的一个用途是将它们变成enum的唯一成员。然后,不可能构造两个相同的“singleton”类。然而,我看到人们给那些单例枚举提供可变数据,或者调用具有可变数据的对象的方法。如果没有显式同步,访问枚举的两个线程可能会相互干扰。因此,如果您想要一个单例作为枚举,请不要使数据可变。看起来您描述的问题实际上与枚举实现的单例本身无关。只要它的实现不能正确处理多线程阶段,这个并发问题就可能影响所有类型的单例。这实际上是Java并发性问题。