五种
image.png
image.png
六种
image.png
image.png
public class StateDemo {
public static void main(String[] args) {
Thread t1 = new Thread("t1"){//NEW
@Override
public void run() {
System.out.println("t1 running...");
}
};
Thread t2 = new Thread("t2"){
@Override
public void run() {
while(true){// Java 中的 RUNNABLE
}
}
};
t2.start();
Thread t3 = new Thread("t3"){//立即执行完 TERMINATED
@Override
public void run() {
System.out.println("t3 running...");
}
};
t3.start();
Thread t4 = new Thread("t4"){
@Override
public void run() {
synchronized (StateDemo.class){
try {
Thread.sleep(1000000000);//TIMED_WAITING 实操打印出了BLOCKED
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
t4.start();
Thread t5 = new Thread("t5"){
@Override
public void run() {
synchronized (StateDemo.class){
try {
t2.join();//WAITING
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
t5.start();
Thread t6 = new Thread("t6"){
@Override
public void run() {
synchronized (StateDemo.class){
try {
Thread.sleep(1000000);//BLOCKED
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
t6.start();
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("t1 state :" + t1.getState());
System.out.println("t2 state :" + t2.getState());
System.out.println("t3 state :" + t3.getState());
System.out.println("t4 state :" + t4.getState());
System.out.println("t5 state :" + t5.getState());
System.out.println("t6 state :" + t6.getState());
//t3 running...
//t1 state :NEW
//t2 state :RUNNABLE
//t3 state :TERMINATED
//t4 state :BLOCKED
//t5 state :WAITING
//t6 state :BLOCKED
}
}
本章小结
- 线程创建
- 线程重要 api,start run sleep join interrupt
- 线程状态
- 应用方面
- 异步调用:主线程执行期间,其他线程异步执行耗时操作
- 提高效率:并行计算,缩短运算时间
- 同步等待:join
- 统筹规划:合理使用线程,得到最优效果
- 原理
- 线程运行流程:栈、栈帧、上下文切换、程序计数器
- Thread 两种创建方式的源码
- 模式方面:两阶段终止