java - 对main线程使用join方法,为什么main线程处于一直阻塞状态?
高洛峰
高洛峰 2017-04-17 17:58:52
0
1
424

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

}

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全員に返信(1)
Ty80

では、まず join 関数が何に使用されるのかを知る必要があります。まずドキュメントを見てみましょう:

リーリー

最初の文にWaits for this thread to dieとあるように、メインスレッドで「現在のスレッドが終了する前にメインスレッドが終了するまで待たなければなりません」を実行すると、無限ループになってしまいませんか?

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート