一直想象不出线程的join是一种怎么样的情况
今天查来一下 自己写了个比喻
Sleep ---- 一个长跑运动员在跑步,被决定原地跑N秒后才可以继续往前跑
Join ---- 一个长跑运动员在跑步,被决定到一旁休息 等到被召唤 才可以继续往前跑在Main的主线程中,Main线程运行完了
Sleep的线程 原地跑后还是继续跑下去
Join的线程 会跟着Main一起退出另外 如果一个线程A执行某函数
函数执行完了, 不声明线程A.abort()什么的
那线程A还会不会存在

解决方案 »

  1.   

    不会存在,函数执行完了线程也就结束了假如有两个线程A,B这两个线程同时开始运行,而B要用到A中计算后的变量,如果不在B中Join的话,那运算的结果就不是我们所想要的
      

  2.   

    不用Abort,线程跑完了自己会自尽。Join就是等执行完。
      

  3.   

    我本来想回答问题来的,但是突然发现我也有疑惑了:
    我之前认为join主要是用于当两个线程的某一操作需要同步的时候才使用,比如线程A中某个方法在执行过程中需要线程B来完成某个任务,获取某个结果后,线程A才能够使用这个结果继续干活。更直观点的比喻:
    线程A中有一个方法需要等待网络上一个用户返回某个数据,然后才能对这个数据执行操作,这个时候就可以在线程A中使用join来执行线程B(线程B负责接收这个数据),因为只有线程B完成任务并退出,线程A才会继续执行。
    这个我现在想不通了,如果是这样,那直接在线程A的那个方法中写上接收用户数据的代码不就可以了嘛,反正执行起来效果和开一个新线程写接收用户数据代码然后join的方法一样的嘛,都不可能接着执行线程A的其它动作了,必须要等待接收完数据后才行。
      

  4.   

    线程的回调函数执行完以后,线程就会结束。
    jion是为了同步,等待另外一个线程结束。
      

  5.   

    我觉得是,
    Sleep ---- 一个长跑运动员在跑步,把接力棒给其他人,被决定一旁休息,N秒后拿到了接力棒才可以继续往前跑
    Join ---- 一个长跑运动员在跑步,在跑道上等着,知道它前面的人跑完之后,它才开始往前跑
      

  6.   


    如果只有一个线程B,并且还等着它完成,那跟在A中直接执行没什么区别,但是如果有n个B需要同时执行,效果就出来了。
      

  7.   

    join这个词的英文意思就是说明了。把自己加入到另一个线程任务,直到那个任务结束再回来。
      

  8.   

    join 是完成线程同步使用的, 等待线程执行结束后, 才执行被join 的线程;
    没有同步关系可以在创建线程可以指定detach