2010-12-10 3 views
1

Мне нужно изменить значение объекта, которое находится в контексте Sevlet в runtime.it, гарантируется моим приложением, что только один поток сбросит значение этого атрибут в ServletContext в то времяесть ли способ ограничить доступ к атрибуту в контексте сервлета

проблемы: моя проблема в то время как один поток устанавливает значение объекта многих других потоков будут начитавшись доступом к этому объекту, и все они могли читать странные значения, как объект может быть наполовину установленным во время его использования

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

ответ

1

ServletContext.setAttribute() всегда нужно Синхронизация

положить ServletContext.setAttribute() в блоке синхронизации.

, так что только один поток будет показывать значение за раз.

+0

Проблема здесь не в том, что два потока могут попытаться установить атрибут. если он уверен, что только один поток установит этот атрибут. но в то время как 1 поток устанавливает этот атрибут, некоторые другие потоки могут иметь доступ для чтения к этому атрибуту. Я хочу ограничить эти потоки чтением до тех пор, пока поток писателя не завершит запись – dpsdce 2010-12-10 05:58:41

1

Поместите ConcurrentHashMap в качестве атрибута servletcontext и управляйте желаемым объектом в качестве записи на карте.

Смежные вопросы