Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Разделение static-переменных между процессами / 7 сообщений из 7, страница 1 из 1
18.09.2005, 18:05
    #33275459
unicornmirage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение static-переменных между процессами
Добрый день.

Скажите пожалуйста, надо ли делать метод синхронизированным? или отказаться от использования статических методов, или все будет нормально работать и так.?

вот есть класс FormFactory, который генерит HTML-формы (его использует сервлет). Содержимое HTML-формы зависит от некоторых параметров, например от группы пользователя, который запрашивает форму. если пользователь Гость то форма ограниченная, если же он Админ, то форма полная. вот отрывок:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
 public   class  FormFactory {
    /**это значение меняется в зависимости от переменной userGroup 
     *в методе  getForm
     */
     static  String VALUE;


     static  String getForm( int  userGroup) {
            if (userGroup =  0 ) {
                VALUE = "значения для группы 0";
                
           }  else  {
                VALUE =  "значения для группы 1";
           }

           String html = ... + .... + VALUE + ... + "</html>";
            return  html;
    }
}

Т.к. запускается несколько потоков сервлета, то не будет ли конфликтных ситуаций, когда пользователь получит другую форму вместо той которая ему требуется?
...
Рейтинг: 0 / 0
18.09.2005, 18:24
    #33275470
unicornmirage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение static-переменных между процессами
хотелось бы послушать экспертов в области мультипоточного программирования
...
Рейтинг: 0 / 0
18.09.2005, 20:33
    #33275559
Сергей Ильич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение static-переменных между процессами
unicornmirageДобрый день.

Скажите пожалуйста, надо ли делать метод синхронизированным? или отказаться от использования статических методов, или все будет нормально работать и так.?

вот есть класс FormFactory, который генерит HTML-формы (его использует сервлет). Содержимое HTML-формы зависит от некоторых параметров, например от группы пользователя, который запрашивает форму. если пользователь Гость то форма ограниченная, если же он Админ, то форма полная. вот отрывок:

Код: plaintext
1.
2.
3.
 public   class  FormFactory {
//Поскипано
    }
}

Т.к. запускается несколько потоков сервлета, то не будет ли конфликтных ситуаций, когда пользователь получит другую форму вместо той которая ему требуется?

А что мешает сделать так?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    /**это значение меняется в зависимости от переменной userGroup 
     *в методе  getForm
     */
     static  String getForm( int  userGroup) {
           String value;
            if (userGroup =  0 ) {
                value = "значения для группы 0";
                
           }  else  {
                value =  "значения для группы 1";
           }

           String html = ... + .... + value + ... + "</html>";
            return  html;
   }

В конце концов, можешь написать static synchronized String getForm(int userGroup)
тогда внутри метода getForm в один момент времени будет находиться один поток - остальные будут ждать. Но в этом случае VALUE могут изменить при желании другие потоки из других классов пакета не входя в getForm(), т.к он package-private а не private.

А вообще писано кондово - почитай про Strategy design pattern.
...
Рейтинг: 0 / 0
18.09.2005, 20:59
    #33275586
unicornmirage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение static-переменных между процессами
а где можно почитать по русски про Strategy design pattern? если не сложно, дайте пожалуйста ссылочку...

что касается основоного вопроса, то убедился что необходимо все же делать синхронизацию метода. спасибо за совет!
...
Рейтинг: 0 / 0
18.09.2005, 23:32
    #33275686
Сергей Ильич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение static-переменных между процессами
unicornmirageа где можно почитать по русски про Strategy design pattern? если не сложно, дайте пожалуйста ссылочку...

что касается основоного вопроса, то убедился что необходимо все же делать синхронизацию метода. спасибо за совет!

Третья ссылка по запросу "Паттерны проектирования Strategy" в google

http://citforum.ru/SE/project/pattern/p_2.shtml#3.2.9

Чтобы этот паттерн адаптировать к твоей задаче надо определить интерфейс IUserGroup с методом String getValue() и сделать его реализации - GuestUserGroup, MemberUserGroup и AdminUserGroup.

Код: plaintext
1.
2.
3.
4.
 static  String getForm(IUserGroup userGroup) {
           String html = ... + .... + userGroup.getValue() + ... + "</html>";
            return  html;
}
Так по моему лучше смотрится
...
Рейтинг: 0 / 0
19.09.2005, 02:14
    #33275720
коты
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение static-переменных между процессами
В конце концов, можешь написать static synchronized String getForm(int userGroup)
тогда внутри метода getForm в один момент времени будет находиться один поток - остальные будут ждать.

иногда вместо паттернов проектирования неплохо бы прикладывать здравый смысл..


1. используй ThreadLocal
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ThreadLocal.html
данные, сохраненные в ThreadLocal не пересекаются между тредами

или
2. сохраняй данные пользователя, необходимые для генерации формы, в сессии

HttpServletRequest request = ...
request.getSession().setAttribute("userGroup", userGroup);

обычно делают вторым способом
...
Рейтинг: 0 / 0
22.09.2005, 11:01
    #33283037
Oleg Belkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение static-переменных между процессами
ThreadLocal - настоятельно не советую.
Почитайте отзывы о этом классе в форумах. У меня, к примеру, под TomCat-ом не все переменки, которые попадают в ThreadLocal чистятся и виноват похоже в этом TomCat ThreadPool и похоже это никак не лкчится :(
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Разделение static-переменных между процессами / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]