если какой-либо класс кэшируется и используется повторно, существует риск повреждения из-за одновременного доступа нескольких потоков. В веб-приложении каждый запрос обрабатывается в потоке. Допустим, у вас есть 10 экземпляров действия, но ваш контейнер обрабатывает 20 запросов - в этом случае каждое из 10 действий используется повторно, потому что у вас в запросе больше запросов, чем действий, доступных для их обслуживания.
Проблема безопасности потока возникает только в том случае, если в действии используется какое-то состояние. Если это так, то действие, обслуживающее один запрос, может установить значение в общей переменной, но тогда другой поток может вступить во владение, и действие снова может изменить общую переменную. В этом случае, когда первоначальный поток вступает во владение, общее состояние было изменено.
Простой способ справиться с этим - настроить свой стек так, чтобы он всегда использовал новое действие, или чтобы в ваших действиях не было общего состояния.