写点什么

Day274

  • 2022 年 5 月 11 日
  • 本文字数:628 字

    阅读完需:约 2 分钟

唤醒条件是获得到锁,必须等待获取一个锁



[](()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 方法意外终止


代码演示





[](()二、线程状态切换图







[](()三、状态转换的特点




用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
Day274_Java_爱好编程进阶_InfoQ写作社区