join
Thread的join方法
当A线程执行到了B线程Join方法时A就会等待,等B线程都执行完A才会执行,Join可以用来临时加入线程执行
本案例,启动了一个JoinThread线程,main(主线程)进行for循环,当计数器为50时,让JoinThread,通过join方法,加入到主线程中,发现只有JoinThread线程执行完,主线程才会执行完毕.
可以刻意让JoinThread线程sleep,如果JoinThread没有调用join方法,那么肯定是主线程执行完毕,但是由于JoinThread线程加入到了main线程,必须等JoinThread执行完毕主线程才能继续执行。
class JoinThread implements Runnable {
@Override public void run() { int i = 0; while (i < 3) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + " i:" + i); i++; } } }
public class Demo10 { public static void main(String[] args) throws InterruptedException { JoinThread jt = new JoinThread(); Thread th = new Thread(jt, "one"); th.start(); int i = 0; while (i < 20) { if (i == 10) { th.join(); } System.err.println(Thread.currentThread().getName() + " i:" + i); i++;
} } } |
上述程序用到了Thread类中的join方法,即th.join语句,作用是将th对应的线程合并到嗲用th.join语句的线程中,main方法的线程中计数器到达100之前,main线程和one线程是交替执行的。在main线程中的计数器到达100后,只有one线程执行,也就是one线程此时被加进了mian线程中,one线程不执行完,main线程会一直等待
带参数的join方法是指定合并时间,有纳秒和毫秒级别。