我知道单例类本质上不是线程安全的。但有没有办法让它成功呢?我在java Web应用程序中有一个单例,我希望每个用户都有一个类。
这是一个问题,因为单身人士持有州,否则就没事了。
答案 0 :(得分:4)
我在java Web应用程序中有一个单例,我希望每个用户都有一个类。
将它变为单身是没有意义的。只需将其设为会话属性即可。 HttpSession
与浏览器会话相关联,并且特定于每个访问者。例如,购物车:
Cart cart = (Cart) session.getAttribute("cart");
if (cart == null) {
cart = new Cart();
session.setAttribute("cart", cart);
}
// ...
它可以只是一个简单的Javabean。
答案 1 :(得分:2)
你的问题对我来说并不是很有意义,因为你要求“这个程序的每个用户都存在一个类”。我猜你的意思是你想要每个用户存在一个实例,在这种情况下你不是在寻找单例,而是在会话范围内查找bean的实例。
答案 2 :(得分:1)
单例对象是整个系统中只有一个实例的对象。
单身人士通常会采用这种模式:
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