请考虑以下代码:
class ThreadJoinTest{
public static void main(String[] arguments){
TimeUnit unit;
final Thread taskThread = new Thread(task);
taskThread.start();
taskThread.join(unit.millis(timeout));
}
}
因此,当主线程执行具有超时值的行taskThread.join()
时,主线程会给taskThread
充足的时间来完成其任务?这是join方法的主要目标吗?
如果出现以下情况:
taskThread
在超时期限之前完成执行?taskThread
尚未执行,会发生什么? taskThread
是否有机会完成任务?taskThread
正常结束或达到超时,主线程如何知道返回了连接?答案 0 :(得分:5)
main
将在taskThread
后立即重新开始
完成。
main
将被允许重新开始,taskThread
将继续。两个线程都可以完成。taskThread
正常结束或达到超时,则将继续执行。 main
无法在不使用其他通信方式的情况下知道超时是否发生或taskThread
是否已完成执行。答案 1 :(得分:4)
join()
在线程上调用时,将等待该线程死(即该线程的run方法完成...)然后只有下面的行join()
将执行。 但是在join()中给出超时,会使join()效果在特定超时后无效。
虽然超时发生,但taskThread将被允许完成工作。
答案 2 :(得分:1)
超时条件优先。当达到超时时,主线程和taskThread是同样可能的执行候选者。