search

Home  >  Q&A  >  body text

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 days ago429

reply all(1)I'll reply

  • PHP中文网

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

    Then you must first know joinwhat the function is used for! Let’s take a look at the documentation first:

    /**
     * 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.
     */

    I said it in the first sentenceWaits for this thread to die, if you execute "I have to wait until the main thread ends before the current thread ends" on the main thread, isn't this an infinite loop?

    reply
    0
  • Cancelreply