Вы не хотите этого делать. Каждый запрос выполняется в своем собственном потоке. Если код, который выполняется в действии браузера, изменяет список, то два запроса могут одновременно изменить список и повредить данные. Вот почему не стоит обращаться к статическим ресурсам из нестатического контекста, и, возможно, поэтому ваш инструмент предупреждает вас.
Посмотрите на это
http://download.oracle.com/javase/6/docs/api/index.html?java/util/concurrent/package-summary.html
в частности, часть о том, как ArrayList не синхронизируется. Также обратите внимание, что в пункте, который я упоминаю, есть решение, а именно
List list = Collections.synchronizedList(new ArrayList(...));
Это один из способов сделать это. Но это все еще не очень хорошая идея, а именно потому, что она может быть медленной. Если это не коммерческое приложение, и вы не имеете дело с большим объемом, вы, вероятно, можете получить, не делая его лучше. Если это тип приложения, которое срабатывает только несколько раз в день, вы можете игнорировать предупреждение, понимая, что возможно , что может произойти что-то плохое, если два запроса замкнут друг на друга.
Лучшее решение: поскольку у вас есть база данных, я буду просто получать информацию из БД по мере необходимости, т. Е. По мере поступления запросов. Вы можете использовать некоторые технологии кэширования для повышения производительности.
Причина, по которой мне не нравится идея синглтон-паттерна, заключается в том, что, даже если это заставляет предупреждение исчезнуть, оно само по себе не решает фундаментальную проблему синхронизации. Однако существует потокобезопасный http://en.wikipedia.org/wiki/Singleton_pattern#Traditional_simple_way_using_synchronization,, который может работать в этом случае.