Spec-Zone.ru › OpenJDK 21

Интерфейс 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 в противном случае

© 1993, 2023, 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/21/docs/api/java.desktop/java/awt/SecondaryLoop.html

Spec-Zone.ru

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