首页 > 解决方案 > 无法理解 Thread join()

问题描述

我是多线程的新手。我知道以下关于线程的事情:

我知道这一点,join()并且join(millis)保持了一段时间。我的问题是,如果我们提供更多的时间,它会join()运行良好并且线程保持 5 秒。然后作为其他线程运行,但如果您提供较少的时间然后喜欢,并保持线程直到它结束。sleep()join(5000)sleep(1000)join()sleep()join(500)sleep(2000)join()

我有以下我不明白的代码join()

public class THRD3 extends Thread { 
    public void run() {
        for(int i = 1 ; i <= 10 ; i++) {
            System.out.println(Thread.currentThread().getName()+" : "+i);

            try { 
                //Thread.sleep(500); 
                Thread.sleep(2000);
            }
            catch (InterruptedException e) {e.printStackTrace();}
        }
    }
    public static void main(String[] args) throws InterruptedException {    
        THRD3 obj = new THRD3();
        THRD3 obj1 = new THRD3();
        THRD3 obj2 = new THRD3();

        obj.start();
        obj.setName("Joined Thread 0");

        //obj.join(2000);
        obj.join(500);

        obj1.start();
        obj2.start();
    }
}

标签: javamultithreading

解决方案


调用Thread.join使调用线程等待线程完成执行。这意味着它将在该语句上“阻塞”,并且在执行完成之前不会继续。传递一个参数可以让你指定一个超时,这意味着调用线程将等到线程完成,或者在超时过去时放弃。

在你的代码obj.join(500)中,让你的主线程什么都不做,等到obj线程完成,或者直到 500 毫秒过去,以先发生者为准。


推荐阅读