Day274
唤醒条件是获得到锁,必须等待获取一个锁
[](()4、Waiting
没有时间期限
进入 waiting 状态
唤醒 waiting 状态
[](()5、Timed Waiting
类似于上面的 waiting 状态,区别在于 Timed Waiting有时间期限
进入 Timed Waiting 状态
可提前被唤醒
代码演示:
public class BlockedWaitingTimedWaiting implements Runnable {
public static void main(String[] args) {
BlockedWaitingTimedWaiting runnable = new BlockedWaitingTimedWaiting();
Thread thread1 = new Thread(runnable);
thread1.start();
Thread thread2 = new Thread(runnable);
thread2.start();
// 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 线程 1 拿到锁,但是 run()执行 1s 的睡眠,就处于 TimedWaiting 状态
System.out.println(thread1.getState());
//线程 2 拿不到锁,就处于于 blocked 状态
System.out.println(thread2.getState());
try {
Thread.sleep(1300);
} catch (InterruptedException e) {
e.printStackTrace();
}
//线程 1 拿到锁执行完,下面就执行 wait()方法,进入 waiting 状态
System.out.println(thread1.getState());
}
@Override
public void run() {
syn();
}
private synchronized void syn(){
try {
Thread.sleep(1000);
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
[](()6、Terminated
终止状态
线程正常完成他的内容
出现一个意外异常,导致 run 方法意外终止
代码演示:
[](()二、线程状态切换图
[](()三、状态转换的特点
评论