java 中,thread 有方法join()
比如,
Thread t = new Thread();
t.start();
t.join();我看的书上讲,t.join() 表示: 将我当前线程加入到t的结尾,以便在我(当前线程)能够个再次运行之前必须完成。这个意思是说t.join是把t加入到当前线程的屁股后面,是这个意思么??我理解的对么?一般都什么情况下用到这个? 有没有具体的情况可以简单说一下

解决方案 »

  1.   

    public class TestJoin extends Thread{
    @Override
    public void run() {
    for(int i=1;i<10;i++){
    System.out.println(Thread.currentThread().getName()+"="+i);
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }

    public static void main(String[] args) throws InterruptedException {
    TestJoin tj1=new TestJoin();
    TestJoin tj2=new TestJoin();

    tj1.start();
            tj1.join();//你试着注释这行代码看看有没有发现不同的结果
    tj2.start();
    tj1.join() 方法意思就说:优先执行tj1线程,直到tj1线程执行完,再执行其他线程.
      

  2.   

    你得例子我跑了,谢谢。但是 如果把 tj2.join();放到 tj2.start();后面,结果就又是轮流输出了。
    那tj1.join()没有起作用?或者 在这个情况下,起了什么作用?我刚才查API 对JOIN()就一句话解释  :“Waits for this thread to die.”
    意思是说,比如遇到tj1.Join(),就使当前thread去waiting,直到tj1的thread die。然后再回到当前进程?
    有点乱
      

  3.   

    还有,我进行这个测试
    tj1.start(); 
    tj2.start(); 
    tj2.join();
    tj1.join();这样就是运行 tj1, tj2, tj1 ,tj2 这个顺序如果这样:
    tj1.start(); 
    tj2.start(); 
    tj1.join();
    tj2.join();
    结果的顺序是 tj1, tj1, tj2, tj1....很诡异。。到底是什么意思呢?
      

  4.   

    join就是等待线程结束,不要想得太复杂。
      

  5.   

    join();谁去调用他,谁就在他的对象上睡觉,只等这个对象把你叫起来, 也就是线程结束时才调用this.notifyAll();吧
      

  6.   

    你得例子我跑了,谢谢。但是 如果把 tj2.join();放到 tj2.start();后面,结果就又是轮流输出了。 
    那tj1.join()没有起作用?或者 在这个情况下,起了什么作用? 我刚才查API 对JOIN()就一句话解释  :“Waits for this thread to die.” 
    意思是说,比如遇到tj1.Join(),就使当前thread去waiting,直到tj1的thread die。然后再回到当前进程? 
    有点乱
      

  7.   

    join()方法意思就是等待tj2的结束,直到tj2结束或者超时了才会返回