Java Swing -работает на EDT

У меня есть пара вопросов относительно Swing и использования EDT для обновлений графического интерфейса.Я только начал читать об этом материале, так что я полный новичок в этой области:

  1. Какие операции необходимы для выполнения в EDT? Если они этого не делают, просто возникает исключение?
  2. Есть ли какое-то конкретное время, когда мы на самом деле автоматически оказываемся на EDT?
  3. Если мы планируем задачу, используя SwingUtilities.invokeLater, мы ставим ее в очередь в текущую очередь задач обновления графического интерфейса (EDT ), верно?
  4. Я предполагаю, что доступ к вышеуказанной очереди синхронизируется или используется некоторая параллельная коллекция, но если я планирую две задачи обновления графического интерфейса из двух фоновых потоков, невозможно сказать, какая из них будет добавлена ​​первой? Например, если поток 1 ПЕРВЫЙ отправляет задачу установки текста JLable в значение «да», а затем, вскоре после этого, появляется второй поток и отправляет задачу установки этого значения в «нет», гарантируем ли мы, что результат будет «да», или это просто вопрос того, как эти вещи планируются ОС?
  5. Как именно SwingWorker обеспечивает запуск метода done()в EDT? Он устанавливает следующий код:

      future = new FutureTask<T>(callable) {
                   @Override
                   protected void done() {
                       doneEDT();
                       setState(StateValue.DONE);
                   }
               };
    

поэтому мне было интересно, гарантирует ли FutureTask, что invokeLaterвызывается?

Спасибо за все ваши ответы.

10
задан Keeley Hoek 6 July 2019 в 17:57
поделиться