powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Разделение static-переменных между процессами
7 сообщений из 7, страница 1 из 1
Разделение static-переменных между процессами
    #33275459
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

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

вот есть класс 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
Разделение static-переменных между процессами
    #33275470
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотелось бы послушать экспертов в области мультипоточного программирования
...
Рейтинг: 0 / 0
Разделение static-переменных между процессами
    #33275559
Фотография Сергей Ильич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Разделение static-переменных между процессами
    #33275586
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а где можно почитать по русски про Strategy design pattern? если не сложно, дайте пожалуйста ссылочку...

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


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