黑马程序员技术交流社区

标题: 关于多线程JOIN方法 [打印本页]

作者: --_.Is’攸稀    时间: 2013-11-4 10:08
标题: 关于多线程JOIN方法
本帖最后由 --_.Is’攸稀 于 2013-11-4 12:43 编辑

看毕老师的视频讲这的时候,不理解JOIN抢的是谁的线程?是只有主线程吗?
t1.start();
t1.join();
t2.start();//这个我理解是要等t1线程执行玩再执行下面。

t1.start();
t2.start();
t1.join();
//这我就不理解会怎么运行了?

作者: 黄小贝    时间: 2013-11-4 10:12
在一个线程里面调用别的线程的join方法,会阻塞当前线程,等那个线程跑完才会继续执行这个线程

t1.start();
t2.start();
t1.join();

这里阻塞的是调用这三行代码的线程,如果你的后面还有代码要执行,必须要t1执行完才会继续执行
作者: 零下五度的水    时间: 2013-11-4 10:40
哪条线程在调用t1.join()方法,哪条线程就会被阻塞,
而通常可以调用t1方法的线程就是创建t1的线程,即t1的父线程,
如果t1是在主函数里被创建的,那这条线程就是主线程
t1.join就相当于主线程自己被冻结,把这条线程让给了t1,什么时候t1跑完了,主线程才重新取得执行权,跑之后的代码
t1.start(); t2.start(); t1.join();
相当于t1自己有一条线程,t2自己也有一条线程,然后主线程把自己的线程让给了t1,
t1可以双线程执行它的代码,t2默默的继续跑着它自己的线程
如果用迅雷之类的下载器来理解的话,这时候t1的下载速度会是t2的两倍
作者: --_.Is’攸稀    时间: 2013-11-4 12:41
零下五度的水 发表于 2013-11-4 10:40
哪条线程在调用t1.join()方法,哪条线程就会被阻塞,
而通常可以调用t1方法的线程就是创建t1的线程,即t1的 ...

哦,就是说在第二种情况下,t1也只是抢了主线程的执行权,t2没影响。
作者: 零下五度的水    时间: 2013-11-4 16:22
嗯,相当于t1 start独立之后又跑回家找他爹要财产继承去了,t2 start之后一直在自力更生艰苦创业 他爹也没跟他提财产继承这事




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2