Как выглядит "основной цикл событий" в старых Java-приложениях [JCIP 9.1]

Я читаю java concuremcy на практике. Теперь я достигаю 9.1 главы. Но я не разрабатывал приложения с графическим интерфейсом на Java.

Цитата из книги:

Почему графические интерфейсы однопоточные?

В прежние времена приложения с графическим интерфейсом были однопоточными, а события с графическим интерфейсом обрабатывались из "основного цикла событий". Современные GUI-структуры используют модель, которая немного отличается: они создают специальный поток диспетчеризации событий (EDT) для обработки событий GUI.

Я не был разработчиком в старые времена, поэтому я не понимаю, что означает "основной цикл событий" в приложениях с графическим интерфейсом. Также Google не отвечает мне четким объяснением.

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

1 ответ

Решение

Да, в обоих случаях есть очередь, в которой задачи ожидают обработки, и поток, который выполняет эти задачи одну за другой.

Основной цикл обработки событий означает выделенный поток, который в цикле обрабатывает все задачи приложения, связанные как с пользовательским интерфейсом, так и со всеми другими аспектами приложения, такими как ввод-вывод и числовые вычисления. Эта модель программирования удобна тем, что, будучи однопоточным, не требует синхронизации потоков. В любом случае, в старые времена компьютеры имели один процессор, и многопоточность не давала большого эффекта.

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

SwingUtilities.invokeLater(new Runnable() {
  @Override
  public void run() {
    //Code to change Swing data.
  }
});

Вы по-прежнему можете использовать EDT для всех задач приложения, а не только для пользовательского интерфейса, если ваше приложение легкое и перегрузка EDT не замедлит работу пользовательского интерфейса.

Другие вопросы по тегам