A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© --_.Is’攸稀 中级黑马   /  2013-11-4 10:08  /  1086 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 --_.Is’攸稀 于 2013-11-4 12:43 编辑

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

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

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

4 个回复

倒序浏览
在一个线程里面调用别的线程的join方法,会阻塞当前线程,等那个线程跑完才会继续执行这个线程

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

这里阻塞的是调用这三行代码的线程,如果你的后面还有代码要执行,必须要t1执行完才会继续执行
回复 使用道具 举报
哪条线程在调用t1.join()方法,哪条线程就会被阻塞,
而通常可以调用t1方法的线程就是创建t1的线程,即t1的父线程,
如果t1是在主函数里被创建的,那这条线程就是主线程
t1.join就相当于主线程自己被冻结,把这条线程让给了t1,什么时候t1跑完了,主线程才重新取得执行权,跑之后的代码
t1.start(); t2.start(); t1.join();
相当于t1自己有一条线程,t2自己也有一条线程,然后主线程把自己的线程让给了t1,
t1可以双线程执行它的代码,t2默默的继续跑着它自己的线程
如果用迅雷之类的下载器来理解的话,这时候t1的下载速度会是t2的两倍

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1 答的很好

查看全部评分

回复 使用道具 举报
零下五度的水 发表于 2013-11-4 10:40
哪条线程在调用t1.join()方法,哪条线程就会被阻塞,
而通常可以调用t1方法的线程就是创建t1的线程,即t1的 ...

哦,就是说在第二种情况下,t1也只是抢了主线程的执行权,t2没影响。
回复 使用道具 举报
嗯,相当于t1 start独立之后又跑回家找他爹要财产继承去了,t2 start之后一直在自力更生艰苦创业 他爹也没跟他提财产继承这事
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马