Как выглядит "основной цикл событий" в старых 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 не замедлит работу пользовательского интерфейса.