SwingUtilities. invokeAndWait . Обидва ці методи приймають єдиний аргумент: Runnable, який визначає нове завдання. Їхня єдина відмінність вказується на їхні назви: invokeLater просто планує завдання та повертається; invokeAndWait очікує завершення завдання перед поверненням.
Метод invokeLater() є надзвичайно важливим методом, про який слід знати якщо ви пишете програму Java, яка використовує багатопотоковість, і ваша програма використовує Swing для свого інтерфейсу користувача. У нашому вступі до потоків за допомогою Swing ми сказали, що будь-які оновлення інтерфейсу користувача мають відбуватися в потокі відправки подій.
Метод invokeAndWait в основному використовується для ситуації, коли код, який вимагає, щоб GUI був активним, запускається після ініціалізації GUI.
Код обробки подій Swing виконується в спеціальному потоці, відомому як потік відправлення подій. Більшість коду, який викликає методи Swing, також виконується в цьому потоці. Це необхідно, тому що більшість методів об’єктів Swing не є «потоково безпечними»: їх виклик із кількох потоків ризикує втручанням потоків або помилками узгодженості пам’яті.
AWTJavaObject Oriented ProgrammingProgrammingSwing. Метод invokeLater() є статичний метод класу SwingUtilities і його можна використовувати для асинхронного виконання завдання в потоці диспетчера подій AWT.
Єдина відмінність між ними полягає в їх назвах: invokeLater просто планує завдання та повертається; invokeAndWait очікує завершення завдання перед поверненням. Ви можете побачити приклади цього в посібнику Swing: SwingUtilities.