了解join()方法示例

Upv*_*ote 14 java multithreading

Java thread join()方法让我感到困惑.我有以下例子

class MyThread extends Thread {
    private String name;
    private int sleepTime;
    private Thread waitsFor;

    MyThread(String name, int stime, Thread wa) { … }

    public void run() {
        System.out.print("["+name+" ");

        try { Thread.sleep(sleepTime); }
        catch(InterruptedException ie) { }

        System.out.print(name+"? ");

        if (!(waitsFor == null))
        try { waitsFor.join(); }
        catch(InterruptedException ie) { }

        System.out.print(name+"] ");
Run Code Online (Sandbox Code Playgroud)

public class JoinTest2 {
    public static void main (String [] args) {
        Thread t1 = new MyThread("1",1000,null);
        Thread t2 = new MyThread("2",4000,t1);
        Thread t3 = new MyThread("3",600,t2);
        Thread t4 = new MyThread("4",500,t3);
        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }
}
Run Code Online (Sandbox Code Playgroud)

线程以什么顺序终止?

mat*_*t b 12

实际上让你困惑的是Thread.join()什么?你没有提到具体的东西.

鉴于Thread.join()(如文档所述),Waits for this thread to die然后t4将等待t3完成,等待t2完成,等待t1完成.

因此t1将先完成,之后t2,t3t4.


Law*_*pin 6

它将以t1,t2,t3,t4 ...连接的顺序终止,使当前正在执行的线程等待,直到它被调用的线程终止.