Как сделать потокобезопасный одноэлементный класс (который содержит состояние) - PullRequest
0 голосов
/ 09 сентября 2011

Я знаю, что одноэлементные классы по своей природе не являются поточно-ориентированными.Но есть ли способ сделать это так?У меня есть одноэлементное приложение в веб-приложении на Java, и я хочу, чтобы для каждого пользователя этой программы существовал один класс.

Это проблема, потому что одноэлементное состояние содержит состояние, в противном случае все будет в порядке.

Ответы [ 3 ]

4 голосов
/ 09 сентября 2011

У меня есть синглтон в веб-приложении java, и я хочу, чтобы для каждого пользователя этой программы существовал один класс.

Нет смысла делатьэто синглтон.Просто сделайте это атрибутом сеанса.HttpSession привязан к сеансу браузера и специфичен для каждого посетителя.Например, корзина покупок:

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

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

// ...

Это может быть просто Javabean.

См. Также:

2 голосов
/ 09 сентября 2011

Ваш вопрос на самом деле не имеет большого смысла для меня, потому что вы просите "один класс для каждого пользователя этой программы". Я предполагаю, что вы имеете в виду, что вы хотите, чтобы для каждого пользователя существовал один экземпляр, и в этом случае вы ищете не одиночный объект, а экземпляр компонента, который находится в области действия сеанса.

1 голос
/ 09 сентября 2011

Одноэлементный объект - это объект с единственным экземпляром в системе.

В эти дни синглтоны обычно используют этот шаблон:

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 для одноэлементного.основы

...