情况1:比如说有abc三个线程,a调用b.join后,a进入阻塞状态,b在运行的过程中可能给c线程运行的机会,问:
c线程处于运行状态的时候,a线程处于什么状态,a线程如果要进入就绪状态,必须的等b线程结束吗?
情况2:如果a调用b.join(10)带参数调用,还是上述的情况,c线程处于运行状态的时候,a线程处于什么状态(a阻塞的时间大于10毫秒),还望高手给指点

解决方案 »

  1.   

    c线程处于运行状态的时候,a线程处于什么状态,a线程如果要进入就绪状态,必须的等b线程结束吗? 
    是的 必须等到b结束
    第2个没时间 晚上看看 现在上课了
      

  2.   

    a什么时候运行取决于b的isAlive()的返回。
    贴源码最明了,
    public final synchronized void join(long millis) 
        throws InterruptedException {
    long base = System.currentTimeMillis();
    long now = 0; if (millis < 0) {
                throw new IllegalArgumentException("timeout value is negative");
    } if (millis == 0) {
        while (isAlive()) {
    wait(0);
        }
    } else {
        while (isAlive()) {
    long delay = millis - now;
    if (delay <= 0) {
        break;
    }
    wait(delay);
    now = System.currentTimeMillis() - base;
        }
    }
        }
    public final void join() throws InterruptedException {
    join(0);
        }