簡體   English   中英

在Java中使用Singleton的最佳方法

[英]best way to use a Singleton in Java

假設我們在Java中有一個線程安全的單例類,這將是使用它的最好或更好的方法。 例如,考慮我們有一個Singleton類,如下所示:

public class MySingleTon {
   // my thread-safe code goes here
}

我們有一個服務類,它通過以下兩種可能的方式使用上述單例:

1:

public class MyService {
   MySingleton singleton;

   public void myMethod1() {
      singleton  = MySingleton.getInstance();
      // code ...
   }

   public void myMethod2() {
      singleton = MySingleton.getInstance();
      // code...
   }
   public void myMethod3() {
      singleton = MySingleton.getInstance();
      // code...
   }
}

要么

2:

public class MyService {

   public void myMethod1() {
      MySingleton singleton = MySingleton.getInstance();
      // code ...
   }

   public void myMethod2() {
      MySingleton singleton = MySingleton.getInstance();
      // code...
   }
   public void myMethod3() {
      MySingleton singleton = MySingleton.getInstance();
      // code...
   }
}

在一種情況下,通過實例變量引用單例,在第二種情況下,將該單例引用為方法局部變量。 考慮到以上兩個片段都在多線程環境中使用,這是一個更好的選擇,為什么?

我將定義第三種方式

public class MyService {
   final static MySingleton singleton = MySingleton.getInstance();

   public void myMethod1() {
      // code ...
   }

   public void myMethod2() {
      // code...
   }
   public void myMethod3() {
      // code...
   }
}

在所有情況下,線程安全性都沒有區別

我認為2會更好。 它使MySingleton自由地殺死單例實例並在需要時重新創建(即,自我檢測死鎖或緩解資源爭用)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM