Как реализовать асинхронное взаимодействие между потоками в Java?
Я разрабатываю один код, в котором у меня есть один родительский поток и один дочерний поток. Теперь мой сценарий, как указано ниже,
- Родительский поток запускает дочерний поток
- после запуска дочернего потока он продолжает работать, что он делает.
- Теперь один раз происходит, что дочерний поток хочет вызвать метод в основном потоке
- затем он вызывает асинхронно основной поток с этим методом.
Я также хочу уточнить, что я знаю пакет параллелизма в java, но он выполняется синхронно, т. Е. Основной поток должен ждать дочерний поток, пока он не завершит выполнение, но я хочу, чтобы основной поток выполнял непрерывную работу во время выполнения дочернего потока.
Моя реализация похожа на SwingWorker
Нить в Java
1 ответ
Вы не можете "вызвать метод в главном потоке". Единственное, что вы можете сделать, это реализовать специальный механизм, посредством которого основной поток по своей собственной инициативе выполняет метод для объекта, который был предоставлен дочерним потоком.
Вышесказанное в общих чертах описывает, что делает механизм Swing: "основной" поток (в этом случае поток диспетчеризации событий) исключает объекты из глобальной очереди и, если тип объекта подходит, вызывает run
метод на связанном экземпляре Runnable
,
Основной момент: в Swing EDT не "продолжает работать, что он делает"; он специально ожидает, когда другие потоки сообщат ему, что делать с помощью этого механизма, а в остальном просто блокируют, вообще ничего не делая.