Это классический способ внедрения некоторого кода в отдельный поток.AWT не является поточно-ориентированным (как все наборы инструментов пользовательского интерфейса), и, следовательно, весь код, который имеет дело с AWT, должен выполняться в специальном потоке - потоке диспетчеризации событий (EDT).
имеет очередь «фрагмента кода» для вызова в EDT: EventQueue .EDT - это просто цикл, который удаляет следующий «фрагмент кода» для выполнения и запускает его.Эти «кусочки кода» на самом деле являются просто Runnable
экземплярами.Это могут быть события пользовательского интерфейса (мышь, клавиатура) или код, который вы, как разработчик, даете ему.
Вызов invokeLater
просто говорит EDT поставить в очередь экземпляр Runnable
в его EventQueue
.Запущенный в очередь исполняемый файл будет выполнен (или, точнее, его метод run
) в EDT, когда наступит его очередь.
Этот способ передачи кода из одного потока в другой очень распространени полезно: это отличный способ сериализации фрагментов кода из разных потоков.Единственное, что должно быть поточно-ориентированным, - это сама очередь.