join 可以安排先后顺序了.如果要先完成t1, 再运行t2, 最近运行t3,就可以这样了
t1.start();
t1.join();
t2.start();
t2.join();
t3.start()
JDK是这样说的:
Waits at most millis milliseconds for this thread to die. A timeout of 0 means to wait forever.
等待一段时间直到这个线程死亡
请问程序的输出结果是5吗?答案是:有可能。这个时候main线程和t线程是并列运行的。
怎样才能让输出结果为5!其实很简单,join() 方法提供了这种功能。join() 方法,它能够使调用该方法的线程在此之前执行完毕。
这个时候,程序输入结果始终为5。
就是说如果是t.join() = t.join(0) 0 JDK这样说的 A timeout of 0 means to wait forever 字面意思是永远等待,其实是等到t结束后。
这个是怎么实现的吗? 看JDK代码:
其实Join方法实现是通过wait。
wait()方法
在其他线程调用对象的wait方法后,导致当前线程等待。线程会释放掉它所占有的“锁标志”,从而使别的线程有机会抢占该锁。
当main线程调用t.join时候,main线程会失去线程对象t的锁,进入等待,直到该对象唤醒main线程,比如退出后。