После введения модели памяти Java рекомендации Swing были изменены, чтобы указать, что любые компоненты Swing должны быть созданы в EDT во избежание неопубликованного состояния экземпляра.
Что я нигде не смог найти, так это то, что загрузка классов также обязательна для EDT или мы можем предварительно загрузить ключевые классы Swing в фоновом потоке? Есть ли официальное заявление от Sun / Oracle по этому поводу? Существуют ли какие-либо классы, которые, как известно, содержат не поточно-безопасное статическое состояние, следовательно, должны быть загружены в EDT?
Разъяснение по вопросу Неми: это практический вопрос. Значительная часть времени запуска нашего приложения тратится на загрузку классов и загрузку шрифтов / изображений в EDT. Большая часть этого может быть приписана Swing и связанным библиотекам.
Вот немного предыстории: как и многие другие приложения Swing, при запуске мы предварительно создаем много форм, чтобы сделать пользовательский интерфейс более отзывчивым. После профилирования мы обнаружили, что фактическое время создания формы относительно быстрое - медленная загрузка всех классов и шрифтов (чтение с диска медленное в корпоративной установке с антивирусным сканером при доступе, сканером наблюдения, аудитом трекер и бог знает, что еще приклеено к драйверу HDD).
Мы попытались создать те же формы в фоновом потоке (нарушая правила Swing), а затем выбросить их. Как только мы закончим, мы создадим те же формы в EDT, что намного быстрее, так как все классы загружаются, а любые другие файлы находятся в кеше диска. Это работает для нас, и мы, вероятно, будем продолжать это делать, если не случится что-то действительно плохое.
То, что я спрашиваю, это безопасная практика, хорошая практика или взлом?