關于wait(int timeout)
- 如果timeout等于0,需要調(diào)用notify或者notifyAll才能繼續(xù)執(zhí)行wait()后面的代碼炬搭,但如果timeoutd大于0,則過了timeout時間聘芜,就可以執(zhí)行wait()后面的代碼了
關于join(long millis)
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;
}
}
}
從源碼我們可以看到梁丘,如果millis等于0燕偶,在調(diào)用這個方法的線程里喝噪,只有當該線程isAlive()==false已經(jīng)的時候,才會跳出這個while循環(huán),否則就會一直阻塞調(diào)用該方法的線程指么,如果大于0酝惧,除了當前線程isAlive()==false的時候,還有一個條件可以退出while循環(huán)伯诬,就是過了millis時間