#multithreading #singleton #thread-safety #struts #synchronized
#многопоточность #singleton #безопасность потоков #struts #синхронизировано
Вопрос:
если классы действий Struts 1 являются одноэлементными классами шаблонов, означает ли это, что не может быть двух потоков класса, доступных для использования?
Мой вопрос был вызван любопытством: если бы я отметил метод внутри синхронизированного класса Struts 1, означает ли это, что в любой момент этот метод может обслуживать только 1 поток.
private synchronized void runSubmitCalculatorState(ControllerRequest request,ControllerResponse response){}
Ответ №1:
Singleton означает, что во всем приложении будет создан только один экземпляр этого класса. Это не означает, что не может быть двух потоков класса, доступных для использования.
Синхронизированный метод означает, что только один поток может получить доступ к этому методу одновременно.
Нет прямой связи между syncronized и singleton, что означает, что вы можете создать либо одноэлементный, либо не одноэлементный класс для синхронизации.
Ответ №2:
Действия Struts 1 являются одиночными, поэтому они должны быть потокобезопасными, потому что только один экземпляр класса обрабатывает все запросы для этого действия. Стратегия singleton ограничивает действия Struts 1 и требует дополнительной осторожности, чтобы сделать ресурсы действия потокобезопасными или синхронизированными при разработке приложения.