Groovy单例线程安全

Groovy单例线程安全,groovy,thread-safety,singleton,Groovy,Thread Safety,Singleton,Groovy中的@Singleton注释是否使单例线程安全 如果不是,那么使用Groovy创建线程安全单例的最简单方法是什么?作为实例使用的实际类是而不是线程安全的(除非您创建了它)。这里有很多例子(例如:这里使用的是静态finalHashMap,这不是线程安全的) 使用groovys@singleton注释创建的singleton是线程安全的(您应该依赖于此) 显示转换生成的相应Java代码的两个版本: 以下是常规版本的@Singleton,它产生了一个静态final变量,在java中也是线程

Groovy中的@Singleton注释是否使单例线程安全


如果不是,那么使用Groovy创建线程安全单例的最简单方法是什么?

作为实例使用的实际类是而不是线程安全的(除非您创建了它)。这里有很多例子(例如:这里使用的是静态final
HashMap
,这不是线程安全的)

使用groovys
@singleton
注释创建的singleton是线程安全的(您应该依赖于此)

显示转换生成的相应Java代码的两个版本:

  • 以下是常规版本的
    @Singleton
    ,它产生了一个
    静态final
    变量,在java中也是线程安全的:

  • 对于
    lazy
    版本(
    @Singleton(lazy=true)
    ),将创建:


  • 作为参考,这里有一个

    您的意思是它是否使类中的所有方法都是线程安全的?
    public class T {
        public static final T instance = new T();
        private T() {}
    }
    
    class T {
        private static volatile T instance
        private T() {}
        static T getInstance () {
            if (instance) {
                instance
            } else {
                synchronized(T) {
                    if (instance) {
                        instance
                    } else {
                        instance = new T ()
                    }
                }
            }
        }
    }