[英]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.