对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();

        }

    }

}

}


梦里花落0921
浏览 471回答 1
1回答

RISEBY

那你得先知道join函数是干嘛用的啊!我们先来看看文档:/**&nbsp;* Waits for this thread to die.&nbsp;*&nbsp;* <p> An invocation of this method behaves in exactly the same&nbsp;* way as the invocation&nbsp;*&nbsp;* <blockquote>&nbsp;* {@linkplain #join(long) join}{@code (0)}&nbsp;* </blockquote>&nbsp;*&nbsp;* @throws&nbsp; InterruptedException&nbsp;*&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if any thread has interrupted the current thread. The&nbsp;*&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <i>interrupted status</i> of the current thread is&nbsp;*&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cleared when this exception is thrown.&nbsp;*/第一句话就说了Waits for this thread to die,你在主线程上执行"我要等到主线程结束,当前线程才能结束",这不成死循环了么。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java