线程的生命周期:Thread中的state枚举类:new(指线程未调用start方法前的状态),runnable(在jvm中已经执行但是还没有被操作系统所调用),blocked(阻塞:sleep,join,i/O等导致的线程的阻塞),waiting,timed_waiting,terminated(最终)
注意图中的常用方法: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适当的情形下被调用;’
}
}