Thread类的join()方法如何工作?

时间:2012-07-15 15:35:56

标签: java

请考虑以下代码:

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正常结束或达到超时,主线程如何知道返回了连接?

3 个答案:

答案 0 :(得分:5)

    {li> main将在taskThread后立即重新开始 完成。
  1. 然后main将被允许重新开始,taskThread将继续。两个线程都可以完成。
  2. 如果taskThread正常结束或达到超时,则将继续执行。 main无法在不使用其他通信方式的情况下知道超时是否发生或taskThread是否已完成执行。

答案 1 :(得分:4)

join()在线程上调用时,将等待该线程死(即该线程的run方法完成...)然后只有下面的行join()将执行。 但是在join()中给出超时,会使join()效果在特定超时后无效。

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

答案 2 :(得分:1)

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