Запрос на выполнение потока - PullRequest
0 голосов
/ 04 ноября 2011

Я запустил четыре потока (многопоточность) и назначил задачу для каждого из потоков.Задача для каждого потока заключается в загрузке файла на сервер

Я хочу выполнить следующие функции.

i> Я хочу назначить следующий набор файлов для 4 новых потоковтолько когда все существующие 4 потока завершили свое выполнение.

Как я могу определить, завершили ли все существующие 4 потока выполнение?

Я использовал условие

for (Thread thread : threads) {

    if(thread.getState() == Thread.State.TERMINATED || getAlive()) == false){

     ++ counter ;

    }
}

чтобы найти статус темы.

Если значение счетчика становится равным 4, то это означает, что все потоки не активны или не прерваны.

Я получаю уведомление для каждого загружаемого файла.После того, как я обнаружил, что значение счетчика = 4, я снова назначил четыре новых файла для загрузки, используя четыре новых потока.

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

Кроме того, возможно, что код, упомянутый выше, не дает надлежащее состояние потоков.Возможно, поток все еще выполнял операцию, когда я переназначил файл для загрузки снова.

Поскольку я использовал четыре потока, counter = 4 означает, что все потоки выполнили свою работу.

Каким должен быть мой подход к решению проблемы?

Ответы [ 3 ]

1 голос
/ 04 ноября 2011

Посмотрите на CountDownLatch .

0 голосов
/ 04 ноября 2011

Вот хороший .. ожидание завершения темы

http://javahowto.blogspot.com/2007/05/when-to-join-threads.html

0 голосов
/ 04 ноября 2011

обязательно ли загружать файлы в наборе 4

Будущее может использоваться для блокировки до завершения операции http://download.oracle.com/javase/6/docs/api/java/util/concurrent/Future.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...