Просто быстро - я нахожусь в процессе написания эмулятора Sega Master System.До сих пор проект состоял в том, что GUI (подкласс JFrame и т. Д.) Выполняется в потоке диспетчеризации событий через вызов EventQueue.invokeLater (), а все функции эмулятора выполняются в отдельном потоке.Из того, что я понимаю, это должно быть хорошей практикой, так как EDT должен инициализировать и обновлять графический интерфейс, при этом Swing не является поточно-ориентированным.
Это приводит меня к небольшому вопросу - консоль работает вотдельный поток (Z80, VDP и т. д.) и VDP (когда я закончу) обновят BufferedImage.Пока я помечаю этот BufferedImage как «синхронизированный», безопасно ли затем обращаться к нему из EDT (в частности, метод рисования GUI)?Я спрашиваю об этом, так как в противном случае мне придется поместить много логики VDP в сам метод рисования, и я бы предпочел не делать этого, поскольку это замедлит работу графического интерфейса в целом.
Простой вопрос, который я знаю,но я все еще привыкаю к использованию Java2D для обеспечения достойной скорости анимации.Стоит отметить, что сразу после вызова метода repaint () в логическом потоке поток логики будет находиться в спящем режиме до тех пор, пока он не проснется для следующего прохода кадра, поэтому я предполагаю, что от этой конструкции не будет снижения производительности.Я прав?
Большое спасибо, Фил Поттер
ОБНОВЛЕНИЕ Я должен был использовать лучший язык - VDP будет получать доступ к BufferedImage через метод синхронизированного установщика, и EDT будетполучать доступ к нему через синхронизированный метод получения.