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