Java多线程 --- join

来源:互联网 发布:小猪cms电商系统 编辑:程序博客网 时间:2024/06/07 09:33

 

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线程,比如退出后。