一直想象不出线程的join是一种怎么样的情况
今天查来一下 自己写了个比喻
Sleep ---- 一个长跑运动员在跑步,被决定原地跑N秒后才可以继续往前跑
Join ---- 一个长跑运动员在跑步,被决定到一旁休息 等到被召唤 才可以继续往前跑在Main的主线程中,Main线程运行完了
Sleep的线程 原地跑后还是继续跑下去
Join的线程 会跟着Main一起退出另外 如果一个线程A执行某函数
函数执行完了, 不声明线程A.abort()什么的
那线程A还会不会存在
今天查来一下 自己写了个比喻
Sleep ---- 一个长跑运动员在跑步,被决定原地跑N秒后才可以继续往前跑
Join ---- 一个长跑运动员在跑步,被决定到一旁休息 等到被召唤 才可以继续往前跑在Main的主线程中,Main线程运行完了
Sleep的线程 原地跑后还是继续跑下去
Join的线程 会跟着Main一起退出另外 如果一个线程A执行某函数
函数执行完了, 不声明线程A.abort()什么的
那线程A还会不会存在
我之前认为join主要是用于当两个线程的某一操作需要同步的时候才使用,比如线程A中某个方法在执行过程中需要线程B来完成某个任务,获取某个结果后,线程A才能够使用这个结果继续干活。更直观点的比喻:
线程A中有一个方法需要等待网络上一个用户返回某个数据,然后才能对这个数据执行操作,这个时候就可以在线程A中使用join来执行线程B(线程B负责接收这个数据),因为只有线程B完成任务并退出,线程A才会继续执行。
这个我现在想不通了,如果是这样,那直接在线程A的那个方法中写上接收用户数据的代码不就可以了嘛,反正执行起来效果和开一个新线程写接收用户数据代码然后join的方法一样的嘛,都不可能接着执行线程A的其它动作了,必须要等待接收完数据后才行。
jion是为了同步,等待另外一个线程结束。
Sleep ---- 一个长跑运动员在跑步,把接力棒给其他人,被决定一旁休息,N秒后拿到了接力棒才可以继续往前跑
Join ---- 一个长跑运动员在跑步,在跑道上等着,知道它前面的人跑完之后,它才开始往前跑
如果只有一个线程B,并且还等着它完成,那跟在A中直接执行没什么区别,但是如果有n个B需要同时执行,效果就出来了。
没有同步关系可以在创建线程可以指定detach