join源码如下:
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;}}}
应用了保护性暂停,如果是带参数的join方法,那么则等待一定时间后,调用join方法的线程得以继续执行,而不是非要等待线程执行完毕后,当前线程才继续执行。
new thread(()->{t1.join(10);},"t2"),start;
即线程t2要等待t1线程执行10秒后,线程t1和线程t2开始并行执行。
