Относительно хороших практик с планированием в Java - PullRequest
0 голосов
/ 02 мая 2018

Я создаю игру с нуля на Java, используя только стандартные библиотеки. До сих пор у меня есть игра, которая печатает символы ASCII в поворотном окне для представления трехмерных объектов. Это довольно круто. Во всяком случае, поскольку я не знаю о потоках или планировании, мне интересно, если я использую некоторые плохие практики, которые могут вызвать проблемы позже. У меня запущено одно повторяющееся задание для обновления уровня каждую десятую секунды, но когда я хочу что-то отложить, я использую

Executors.newScheduledThreadPool(1).schedule... etc etc.

Хорошо ли создавать «новый запланированный пул потоков» каждый раз, когда я хочу, чтобы новая отложенная задача запускалась один раз, или я должен пытаться поддерживать работу одного экземпляра? Если полезно повторно использовать экземпляры, когда уместно создавать новый?

1 Ответ

0 голосов
/ 02 мая 2018

Параллелизм в приложениях Swing сложен: все, что влияет на GUI, должно выполняться в одном потоке (называемом потоком диспетчеризации событий). Поэтому, когда вы настраиваете отдельный поток для выполнения какой-то длительной фоновой задачи (например, создание карты для области, которую игрок еще не просматривает), вам необходимо тщательно поработать, чтобы синхронизировать все, что может повлиять на GUI.

Как правило, у вас есть два варианта для более простых вариантов использования:

  • Если это короткое действие, которое непосредственно влияет на GUI, тогда используйте Timer, чтобы вызвать событие в потоке отправки событий. Смотри здесь .
  • Если это длинное занятие, тогда используйте SwingWorker. Смотри здесь .

Существует множество других способов взаимодействия с другими потоками (например, см. SwingUtilities.invokeLater и SwingUtilities.invokeAndWait), но, учитывая, что вы сказали, что только начинаете, я бы предложил придерживаться одного из этих двух вариантов. Они позаботятся о большей части сложности для вас и позволят вам сосредоточиться на игровой логике.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...