簡體   English   中英

Thread.join無法正常工作

[英]Thread.join not working

對join()的調用保證使當前線程停止執行,直到它加入的線程(換句話說,它調用join()的線程)完成。

但是,在我的程序中,兩個線程同時執行。 Thread1沒有等待Thread2完成執行。

我的計划有什么問題?

public class Launcher1 {


    public static void main(String[] args) {
        JoinExample runnable=new JoinExample();

        Thread thread1=new Thread(runnable);
        Thread thread2=new Thread(runnable);

        thread1.start();

        try {
            Thread.sleep(2000);
        } catch (InterruptedException e1) {
            e1.printStackTrace();
        }

        thread2.start();
        try {
            thread2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }

}

public class JoinExample implements Runnable{
    public void run(){
        for(int i=0;i<10;i++){
            System.out.println("i:"+i+" "+Thread.currentThread().getName());

            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

}

輸出:

i:0線程-0

我:1個線程-0

i:0線程-1

i:2個線程-0

我:1個線程-1

我:3個線程-0

我:4個線程-0

我:2個線程-1

我:3線程-1

我:5個線程-0

我:4線程-1

我:6個線程-0

我:7個線程-0

我:5線程-1

我:8個線程-0

我:6線程-1

我:7線程-1

我:9線程-0

我:8個線程-1

我:9線程-1

但是,在我的程序中,兩個線程同時執行。 Thread1沒有等待Thread2完成執行。

不,它不會 - 因為線程1沒有調用join 看看你再次引用的文檔:

對join()的調用保證使當前線程停止執行,直到它加入的線程

換句話說: join()方法在調用它的線程完成之前不會完成。

你的程序中有三個線程 - 兩個運行JoinExample.run ,以及啟動另外兩個的“main”線程。 你告訴線程等待線程2完成,但這就是全部。 您的兩個JoinExample線程完全獨​​立。

這里有三個問題。 第一個線程 - 主線程,它運行main方法並生成2個子線程。 第二個線程 - thread1第三個線程 - thread2當你說thread2.join() ,主線程將阻塞直到thread2完成, thread1thread2將繼續運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM