我已经启动了四个线程(多线程)&为每个线程分配了一个任务。 每个线程的任务是将文件上传到服务器
我想执行以下功能。
i>只有当所有现有的4个线程都已完成执行时,才想将下一组文件分配给4个新线程。
如何确定所有现有的4个线程是否已完成执行?
我使用了条件
for (Thread thread : threads) {
if(thread.getState() == Thread.State.TERMINATED || getAlive()) == false){
++ counter ;
}
}
找到线程的状态。
如果计数器值变为4,则表示所有线程都未处于活动状态或已终止。
我收到了每个上传文件的通知。
在我发现计数器值= 4后,我再次使用四个新线程分配了四个要上传的新文件。
可能存在第一次没有上传文件的情况,所以我需要重新分配它。我发现,我正在重新分配已经上传的文件。 所以,它是一个重复的上传。我再次分配了该文件,因为我没有收到有关该特定文件上传成功的通知。
此外,可能是上面提到的代码没有给出正确的线程状态。当我再次重新分配文件以进行上传时,线程仍然可以执行操作。
由于我使用了四个线程,因此counter = 4意味着所有线程都已执行了它们的操作。
解决问题的方法应该是什么?
答案 0 :(得分:1)
答案 1 :(得分:0)
是否必须以4件套上传文件
未来可以用来阻止直到操作完成 http://download.oracle.com/javase/6/docs/api/java/util/concurrent/Future.html
答案 2 :(得分:0)
这是好的......等待线程完成
http://javahowto.blogspot.com/2007/05/when-to-join-threads.html