搜尋

首頁  >  問答  >  主體

java - 对main线程使用join方法,为什么main线程处于一直阻塞状态?

public class JoinTest {

public static void main(String[] args) throws InterruptedException {
    MyThread3 thread=new MyThread3();
    thread.start();
    //thread.join(1);//将主线程加入到子线程后面,不过如果子线程在1毫秒时间内没执行完,则主线程便不再等待它执行完,进入就绪状态,等待cpu调度
    System.out.println(Thread.currentThread());
    Thread.currentThread().join();
    for(int i=0;i<30;i++){
        System.out.println(Thread.currentThread().getName() + "线程第" + i + "次执行!");
    }
}

}

class MyThread3 extends Thread {

@Override
public void run() {
    
    for (int i = 0; i < 1000; i++) {
        try {
            System.out.println(this.getName() + "线程第" + i + "次执行!");
            Thread.sleep(1);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

}

高洛峰高洛峰2888 天前435

全部回覆(1)我來回復

  • PHP中文网

    PHP中文网2017-04-17 18:00:52

    那你得先知道join函數是幹嘛用的啊!我們先來看看文件:

    /**
     * Waits for this thread to die.
     *
     * <p> An invocation of this method behaves in exactly the same
     * way as the invocation
     *
     * <blockquote>
     * {@linkplain #join(long) join}{@code (0)}
     * </blockquote>
     *
     * @throws  InterruptedException
     *          if any thread has interrupted the current thread. The
     *          <i>interrupted status</i> of the current thread is
     *          cleared when this exception is thrown.
     */

    第一句話就說了Waits for this thread to die,你在主線程上執行"我要等到主線程結束,當前線程才能結束",這不成死循環了麼。

    回覆
    0
  • 取消回覆