情况1:比如说有abc三个线程,a调用b.join后,a进入阻塞状态,b在运行的过程中可能给c线程运行的机会,问:
c线程处于运行状态的时候,a线程处于什么状态,a线程如果要进入就绪状态,必须的等b线程结束吗?
情况2:如果a调用b.join(10)带参数调用,还是上述的情况,c线程处于运行状态的时候,a线程处于什么状态(a阻塞的时间大于10毫秒),还望高手给指点
c线程处于运行状态的时候,a线程处于什么状态,a线程如果要进入就绪状态,必须的等b线程结束吗?
情况2:如果a调用b.join(10)带参数调用,还是上述的情况,c线程处于运行状态的时候,a线程处于什么状态(a阻塞的时间大于10毫秒),还望高手给指点
是的 必须等到b结束
第2个没时间 晚上看看 现在上课了
贴源码最明了,
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);
}