- 之前只是知道在一个线程中调用了其他线程的
join方法会让那个线程执行,自己进行休眠。
join是一个实例方法,而且是synchroinzed的。说明进到这个方法拿到了该对象的隐式锁。
- 上源码
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;
}
}
}
- 那么谁来notify呢
- ??????????
- 一个线程运行结束之后jvm会调用
notifyAll。谜团解开
- 而且
join也会释放锁。进入waiting状态