2014-09-24 181 views
3

Groovy中的@Singleton註釋使單線程安全嗎?Groovy單例線程安全

如果不是這樣,那麼使用Groovy創建線程安全單例最簡單的方法是什麼?

+1

你的意思是它使你的Thread類的所有方法安全嗎? – 2014-09-24 19:10:59

回答

3

用作實例的實際類是而不是線程安全(除非您提供)。有很多的例子在這裏(如Are final static variables thread safe in Java?:靜態最終HashMap目前使用的是,這是不是線程安全的)

創建使用groovys @Singleton註釋線程(你應該依賴於單例 )。

docs顯示兩個版本,通過變換生成相應的Java代碼:

  1. 這裏是普通版@Singleton,這會導致static final變量,而這又是線程在java中:

    public class T { 
        public static final T instance = new T(); 
        private T() {} 
    } 
    
  2. 對於lazy版本( @Singleton(lazy=true)Double-checked locking創建:

    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() 
           } 
          } 
         } 
        } 
    } 
    

僅供參考,這裏是一個gist with a simple class and the disassembled code