Java中线程join()方法可以保证线程的顺序执行,如有三个线程A,B,C,我们在不使用join()方法的情况下,执行的顺序是不固定的。

如果我们使用join()方法可以让A线程执行完成后再执行B线程,B线程执行完成后,再执行C线程。

线程join()方法的定义:

public final synchronized void join(long millis, int nanos);
public final void join() throws InterruptedException;
public final synchronized void join(long millis);

1)不使用join的方法,我们可以参考之前的例子 继承Thread类  创建线程。

输出的结果如下:

线程名Thread-0,次数(4)
线程名Thread-1,次数(4)
线程名Thread-0,次数(3)
线程名Thread-1,次数(3)
线程名Thread-0,次数(2)
线程名Thread-1,次数(2)
线程名Thread-0,次数(1)
线程名Thread-1,次数(1)
线程名Thread-0,次数(0)
线程名Thread-1,次数(0)

 线程1和线程2是交错执行的。

2)下面使用Join()方法让线程顺序执行。

public class MyThreadTask extends Thread {
    private int count = 5;
    @Override
    public void run() {
        while(count-- >0)
        {
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("线程名" + this.getName() + ",次数(" + count + ")");
        }
    }
    public static void main(String[] args) throws InterruptedException {

        MyThreadTask task1 = new MyThreadTask();
        MyThreadTask task2 = new MyThreadTask();
        task1.start();
		task1.join();
        task2.start();

    }
}

测试一下

输出结果如下:
线程名Thread-0,次数(4)
线程名Thread-0,次数(3)
线程名Thread-0,次数(2)
线程名Thread-0,次数(1)
线程名Thread-0,次数(0)
线程名Thread-1,次数(4)
线程名Thread-1,次数(3)
线程名Thread-1,次数(2)
线程名Thread-1,次数(1)
线程名Thread-1,次数(0)

 我们看到线程1执行完成后才会执行线程2。