如果我有一个准备好要使用的10个线程的数组,并且如果我有类似的东西

for (int i=0;i< MyThreadArray.length: i++){
MyThreadArray[i].start()
MyThreadArray.join()
}

如果线程#6的sleep()为5分钟,如何在线程6结束之前运行线程#7?我必须等待#6的结束,或者有一些指令可以运行“下一个线程”?

最佳答案

使用两个循环。在第一个中,您应该启动所有线程:

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的开销。

关于java - Java线程join(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53868372/

10-11 11:08