如果我有一个准备好可以使用的10个线程的数组,并且如果我有类似的东西
for (int i=0;i< MyThreadArray.length: i++){
MyThreadArray[i].start()
MyThreadArray.join()
}
如果线程#6的sleep()为5分钟,如何在线程#6结束之前运行线程#7?我必须等待#6的结束,或者有一些指令可以运行“下一个线程”?
答案 0 :(得分:4)
使用两个循环。在第一个中,您应该启动所有线程:
for (int i=0;i< MyThreadArray.length: i++){
MyThreadArray[i].start()
}
这将启动所有这些。然后,您要等待它们完成:
for (int i=0;i< MyThreadArray.length: i++){
MyThreadArray[i].join()
// notice ^^^ you had a typo there
}
这将等待每个线程完成后再继续。
此外,请注意以下特殊逻辑:
for (int i=0;i< MyThreadArray.length: i++){
MyThreadArray[i].start()
MyThreadArray[i].join()
}
只是不使用并行机制的较差版本,因为它会顺序等待每个线程,另外增加了启动Thread
的开销。