alt

线程的生命周期:Thread中的state枚举类:new(指线程未调用start方法前的状态),runnable(在jvm中已经执行但是还没有被操作系统所调用),blocked(阻塞:sleep,join,i/O等导致的线程的阻塞),waiting,timed_waiting,terminated(最终)

alt

注意图中的常用方法:notify(),notifyAll()是Object类的方法,这意味着每个子类都有此方法;

package com.ydlclass.thread;

public class UseJoinFunction {
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(() -> {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("t1_________");
        });
        Thread t2 = new Thread(() -> {
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("t2_____");
        });

        t1.start();
        t2.start();
        //如果我想等到t1执行结束在执行sout
        t1.join();//哪个线程调用此方法,就会阻塞线程;等到t1线程执行完成之才会执行
        /**
         * join()存在时的执行结果为:
         * t1_________
         * main_________
         * t2_____
         * join方法不存时:
         * 
         *  main_________
         * t1_________
         * t2_____
         */
        System.out.println("main_________");
        //main创建t1,创建t2,启动t1,启动t2,打印;t1,t2会在OS适当的情形下被调用;’


    }
}