簡體   English   中英

如何使線程安全的單例類(保存狀態)

[英]How to make a thread safe singleton class (that holds state)

我知道單例類本質上不是線程安全的。 但是有沒有辦法做到這一點? 我在Java Web應用程序中有一個單例,並且我希望該程序的每個用戶都存在一個類。

這是一個問題,因為單例保持狀態,否則就可以了。

我在Java Web應用程序中有一個單例,並且我希望該程序的每個用戶都存在一個類。

使它成為單例是沒有意義的。 只需將其設置為會話屬性即可。 HttpSession綁定到瀏覽器會話,並且特定於每個訪問者。 例如,購物車:

Cart cart = (Cart) session.getAttribute("cart");

if (cart == null) {
    cart = new Cart();
    session.setAttribute("cart", cart);
}

// ...

它可以只是一個簡單的Javabean。

也可以看看:

對於我來說,您的問題並不是很有意義,因為您要求“該程序的每個用戶都存在一個類”。 我猜您的意思是您希望每個用戶存在一個實例,在這種情況下,您不是要查找單個實例,而是要在會話范圍內查找bean實例。

單例對象是整個系統中只有一個實例的對象。

這些天,單例通常采用這種模式:

public class Singleton {
   // Private constructor prevents instantiation from other classes
   private Singleton() {
   }

   /**
    * SingletonHolder is loaded on the first execution of Singleton.getInstance() 
    * or the first access to SingletonHolder.INSTANCE, not before.
    */
   private static class SingletonHolder { 
     public static final Singleton instance = new Singleton();
   }

   public static Singleton getInstance() {
     return SingletonHolder.instance;
   }
 }

有關單例基礎知識,請參見http://en.wikipedia.org/wiki/Singleton_pattern

暫無
暫無

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

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