Spec-Zone.ru › OpenJDK 25

Интерфейс SecondaryLoop

public interface SecondaryLoop
Вспомогательный интерфейс для запуска вложенного цикла событий.

Объекты, реализующие этот интерфейс, создаются с помощью метода EventQueue.createSecondaryLoop(). Интерфейс предоставляет два метода — enter() и exit(), — которые можно использовать для запуска и остановки цикла событий.

При вызове метода enter() текущий поток блокируется до завершения цикла методом exit(). Также в потоке диспетчеризации событий запускается новый цикл событий, который может выполняться как в текущем потоке, так и в другом. Цикл можно завершить в любом потоке, вызвав его метод exit(). После завершения цикла объект SecondaryLoop можно использовать повторно для запуска нового вложенного цикла событий.

Типичный пример применения этого интерфейса — модальные диалоги AWT и Swing. Когда модальный диалог отображается в потоке диспетчеризации событий, он запускает новый вторичный цикл. Позже, когда диалог скрывается или закрывается, цикл завершается, и поток продолжает выполнение.

В следующем примере показан простой вариант использования вторичных циклов:

  SecondaryLoop loop;

  JButton jButton = new JButton("Button");
  jButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
          Toolkit tk = Toolkit.getDefaultToolkit();
          EventQueue eq = tk.getSystemEventQueue();
          loop = eq.createSecondaryLoop();

          // Spawn a new thread to do the work
          Thread worker = new WorkerThread();
          worker.start();

          // Enter the loop to block the current event
          // handler, but leave UI responsive
          if (!loop.enter()) {
              // Report an error
          }
      }
  });

  class WorkerThread extends Thread {
      @Override
      public void run() {
          // Perform calculations
          doSomethingUseful();

          // Exit the loop
          loop.exit();
      }
  }
Начиная с версии:
1.7
См. также:
  • Dialog.show()
  • EventQueue.createSecondaryLoop()
  • Toolkit.getSystemEventQueue()

Краткое описание методов

Модификатор и тип Метод Описание
boolean enter()
Блокирует выполнение текущего потока и запускает новый вторичный цикл событий в потоке диспетчеризации событий.
boolean exit()
Возобновляет выполнение потока, заблокированного методом enter(), и завершает вторичный цикл.

Подробное описание методов

enter

boolean enter()
Блокирует выполнение текущего потока и запускает новый вторичный цикл событий в потоке диспетчеризации событий.

Этот метод может быть вызван любым потоком, включая поток диспетчеризации событий. Этот поток будет заблокирован до вызова метода exit() или завершения цикла. В любом случае в потоке диспетчеризации событий будет создан новый вторичный цикл для обработки событий.

Этот метод может запускать только один новый цикл событий на объект одновременно. Если этот объект уже запустил вторичный цикл событий, который всё ещё выполняется, метод возвращает false, указывая на то, что запустить новый цикл событий не удалось. В противном случае этот метод блокирует вызывающий поток и позднее возвращает true после завершения нового цикла событий. После этого данный объект можно снова использовать для запуска нового цикла событий.

Возвращает:
true после завершения вторичного цикла, если вторичный цикл был запущен этим вызовом; в противном случае — false

exit

boolean exit()
Возобновляет выполнение потока, заблокированного методом enter(), и завершает вторичный цикл.

Этот метод возобновляет выполнение потока, вызвавшего метод enter(), и завершает вторичный цикл, созданный при вызове метода enter().

Обратите внимание: если во время выполнения этого цикла запущен другой вторичный цикл, заблокированный поток возобновит выполнение только после завершения вложенного цикла.

Если этот вторичный цикл не был запущен методом enter() или уже был завершён методом exit(), этот метод возвращает false; в противном случае возвращается true.

Возвращает:
true, если этот цикл был ранее запущен и ещё не был завершён методом exit(); в противном случае — false

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.desktop/java/awt/SecondaryLoop.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API