Как реализовать асинхронное взаимодействие между потоками в Java?

Я разрабатываю один код, в котором у меня есть один родительский поток и один дочерний поток. Теперь мой сценарий, как указано ниже,

  • Родительский поток запускает дочерний поток
  • после запуска дочернего потока он продолжает работать, что он делает.
  • Теперь один раз происходит, что дочерний поток хочет вызвать метод в основном потоке
  • затем он вызывает асинхронно основной поток с этим методом.

Я также хочу уточнить, что я знаю пакет параллелизма в java, но он выполняется синхронно, т. Е. Основной поток должен ждать дочерний поток, пока он не завершит выполнение, но я хочу, чтобы основной поток выполнял непрерывную работу во время выполнения дочернего потока.

Моя реализация похожа на SwingWorker Нить в Java

1 ответ

Вы не можете "вызвать метод в главном потоке". Единственное, что вы можете сделать, это реализовать специальный механизм, посредством которого основной поток по своей собственной инициативе выполняет метод для объекта, который был предоставлен дочерним потоком.

Вышесказанное в общих чертах описывает, что делает механизм Swing: "основной" поток (в этом случае поток диспетчеризации событий) исключает объекты из глобальной очереди и, если тип объекта подходит, вызывает run метод на связанном экземпляре Runnable,

Основной момент: в Swing EDT не "продолжает работать, что он делает"; он специально ожидает, когда другие потоки сообщат ему, что делать с помощью этого механизма, а в остальном просто блокируют, вообще ничего не делая.

Другие вопросы по тегам