Java线程join()

时间:2018-12-20 12:05:14

标签: java multithreading join wait

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

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

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

1 个答案:

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