Запрос на выполнение потока

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

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

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

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

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

for (Thread thread : threads) {

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

     ++ counter ;

    }
}

чтобы узнать статус потоков.

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

Я получаю уведомление о каждом загружаемом файле.

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

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

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

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

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


person chiranjib    schedule 04.11.2011    source источник
comment
используйте join(), чтобы заблокировать вызывающий поток, пока поток не завершится.   -  person abhinav    schedule 04.11.2011


Ответы (3)


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

person svaor    schedule 04.11.2011

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

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

person Anish Dasappan    schedule 04.11.2011

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

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

person Narayana    schedule 04.11.2011