6

考虑以下代码:

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 方法的主要目标吗?

如果出现以下情况会发生什么:

  1. taskThread在超时期限之前完成它的执行?
  2. 如果达到超时但taskThread尚未完成执行会怎样?是否taskThread有机会完成其任务?
  3. 主线程如何知道由于taskThread正常完成或达到超时而返回连接?
4

3 回答 3

6
  1. main完成后将被允许重新开始taskThread
  2. 然后main将被允许重新开始,taskThread并将继续。两个线程都将被允许完成。
  3. 如果taskThread正常完成或达到超时,main 将继续执行。在不使用其他通信方式的情况下,main无法知道是否发生超时或是否完成执行。taskThread
于 2012-07-15T15:40:24.710 回答
4

join()当在线程上调用时,将等待该线程死亡(即该线程的 run 方法完成......)。只有这样下面的行join()才会执行。但是在 join() 中设置一个超时,会使 join() 效果在特定超时后失效。

尽管发生超时,但 taskThread 将被允许完成工作。

于 2012-07-15T15:38:35.623 回答
1

超时条件将优先。当达到超时时,主线程和 taskThread 是同样可能执行的候选者。

于 2013-07-13T10:55:09.993 回答