2012-04-25 4 views
2

У меня есть родительский поток. Задача состоит в том, чтобы запросить запрос и инициировать дочерний поток. Дочерний поток должен получать данные от веб-службы и обратного вызова к родительскому потоку. Данные процесса родительского потока и запуск другого дочернего потока. Проблема в том, что все, что находится внутри метода обратного вызова, обрабатывается дочерним потоком, а не родительским потоком. Есть ли способ обработать обратный вызов родительским потоком? Другими словами, дочерний поток заканчивается сразу после вызова метода обратного вызова без его обработки.Обратный вызов родительского потока из дочернего потока

ответ

2

Для этого вам нужен какой-то дизайн, но для начала я не вижу точки дочернего потока, если основной поток ничего не сделает, кроме как дожидаться завершения. Если, с другой стороны, основной поток должен обслуживать дальнейшие входящие запросы, то он также не может обслуживать обратные вызовы из дочерних потоков. Вам придется переосмыслить это. Одна идея состоит в том, чтобы один поток собирал запросы и толкал их в очередь. Ребенок-потоки переносят свои события в одну очередь, и есть отдельный поток, который обрабатывает события из очереди - как запросы, так и ответы от дочерних потоков.

Если такая вещь звучит хорошо для вас, тогда обязательно используйте ExecutorService для обработки очередей заданий.

+0

Чтобы проверить, если я понял: Темы: Главная - взаимодействует с пользователем -> Service - очереди запрашивать и начать -> Процессор - обрабатывать запрос (получить данные из веб-службы) -> Viewer - показать данные по на экране Должен ли я иметь столько потоков, или это можно сделать проще? – user1137146

+0

Вы имеете в виду, что на самом деле у вас есть поток графического интерфейса и вы хотите разгрузить длинную операцию (вызов WS) в поток без GUI? Это все, что вы ищете? –

+0

Да. Все, что я хочу знать, это то, что, когда я успешно получаю данные из WS с некоторым потоком, мне нужно создать новый поток для отображения данных или я могу вызвать свой родительский поток для этого. Я не хочу, чтобы поток WS обрабатывал отображение данных. – user1137146

0

Как упоминалось в Marko, вы можете использовать ExecutorService, у которых есть ссылка Future, вы можете вернуть результат выполнения задания в родительский поток.

Смежные вопросы