查询线程执行

时间:2011-11-04 06:01:26

标签: java multithreading thread-safety

我已经启动了四个线程(多线程)&为每个线程分配了一个任务。 每个线程的任务是将文件上传到服务器

我想执行以下功能。

i>只有当所有现有的4个线程都已完成执行时,才想将下一组文件分配给4个新线程。

如何确定所有现有的4个线程是否已完成执行?

我使用了条件

for (Thread thread : threads) {

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

     ++ counter ;

    }
}

找到线程的状态。

如果计数器值变为4,则表示所有线程都未处于活动状态或已终止。

我收到了每个上传文件的通知。

在我发现计数器值= 4后,我再次使用四个新线程分配了四个要上传的新文件。

可能存在第一次没有上传文件的情况,所以我需要重新分配它。我发现,我正在重新分配已经上传的文件。 所以,它是一个重复的上传。我再次分配了该文件,因为我没有收到有关该特定文件上传成功的通知。

此外,可能是上面提到的代码没有给出正确的线程状态。当我再次重新分配文件以进行上传时,线程仍然可以执行操作。

由于我使用了四个线程,因此counter = 4意味着所有线程都已执行了它们的操作。

解决问题的方法应该是什么?

3 个答案:

答案 0 :(得分:1)

请看CountDownLatch

答案 1 :(得分:0)

是否必须以4件套上传文件

未来可以用来阻止直到操作完成 http://download.oracle.com/javase/6/docs/api/java/util/concurrent/Future.html

答案 2 :(得分:0)