线程状态

6个状态定义:java.lang.Thread.State

  1. New: 尚未启动的线程的线程状态。
  2. Runnable: 可运行线程的线程状态,等待CPU调度。
  3. Blocked: 线程阻塞等待监视器锁定的线程状态。处于synchronized同步代码块或方法中被阻塞。
  4. Waiting: 等待线程的线程状态。下列不带超时的方式:Object.wait、Thread.join、LockSupport.park
  5. Timed Waiting: 具有指定等待时间的等待线程的线程状态。下列超时的方式:Thread.sleep、Object.wait、Thread.join、LockSupport.parkNanos、LockSupport.parkUntil

常见线程状态切换

新建->运行->终止

Thread thread1 = new Thread(new Runnable() {@Overridepublic void run() {System.out.println("thread1当前状态:" + Thread.currentThread().getState().toString());System.out.println("thread1 执行了");}});
System.out.println("没调用start方法,thread1当前状态:" + thread1.getState().toString());
thread1.start();
Thread.sleep(2000L); // 等待thread1执行结束,再看状态
System.out.println("等待两秒,再看thread1当前状态:" + thread1.getState().toString());

新建->运行->等待->运行->终止

Thread thread2 = new Thread(new Runnable() {@Overridepublic void run() {try {// 将线程2移动到等待状态,1500后自动唤醒Thread.sleep(1500);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("thread2当前状态:" + Thread.currentThread().getState().toString());System.out.println("thread2 执行了");}});
System.out.println("没调用start方法,thread2当前状态:" + thread2.getState().toString());
thread2.start();
System.out.println("调用start方法,thread2当前状态:" + thread2.getState().toString());
Thread.sleep(200L); // 等待200毫秒,再看状态
System.out.println("等待200毫秒,再看thread2当前状态:" + thread2.getState().toString());
Thread.sleep(3000L); // 再等待3秒,让thread2执行完毕,再看状态
System.out.println("等待3秒,再看thread2当前状态:" + thread2.getState().toString());

新建->运行->阻塞->运行->终止

Thread thread3 = new Thread(new Runnable() {@Overridepublic void run() {synchronized (Demo2.class) {System.out.println("thread3当前状态:" + Thread.currentThread().getState().toString());System.out.println("thread3 执行了");}}});
synchronized (Demo2.class) {System.out.println("没调用start方法,thread3当前状态:" + thread3.getState().toString());thread3.start();System.out.println("调用start方法,thread3当前状态:" + thread3.getState().toString());Thread.sleep(200L); // 等待200毫秒,再看状态System.out.println("等待200毫秒,再看thread3当前状态:" + thread3.getState().toString());
}
Thread.sleep(3000L); // 再等待3秒,让thread3执行完毕,再看状态
System.out.println("等待3秒,让thread3抢到锁,再看thread3当前状态:" + thread3.getState().toString());

转载于:https://www.cnblogs.com/loveyous/p/11410786.html

Java多线程-线程状态相关推荐

  1. Java多线程 —— 线程状态迁移

    引言 线程状态迁移,又常被称作线程的生命周期,指的是线程从创建到终结需要经历哪些状态,什么情况下会出现哪些状态. 线程的状态直接关系着并发编程的各种问题,本文就线程的状态迁移做一初步探讨,并总结在何种 ...

  2. Java多线程——线程的优先级和生命周期

    Java多线程--线程的优先级和生命周期 摘要:本文主要介绍了线程的优先级以及线程有哪些生命周期. 部分内容来自以下博客: https://www.cnblogs.com/sunddenly/p/41 ...

  3. 线程知识点(一)—— 程序、进程、线程之间的区别与联系、Java的线程状态和生命周期

    1 程序.进程.线程之间的区别与联系 三者之间的形象化理解: * 程序:代码实现了功能,就是程序,是静态的: * 进程:执行中的程序就是进程,是动态的: * 线程:进程内的一个执行单元,也是进程内的可 ...

  4. java多线程-线程的停止【interrupt】

    java多线程-线程的停止 文章目录 java多线程-线程的停止 线程停止的原理 如何正确停止线程 在普通情况下停止线程 代码展示 在阻塞情况下停止线程 代码展示 线程在每次迭代后都阻塞 代码展示 停 ...

  5. java多线程 线程安全_Java中的线程安全

    java多线程 线程安全 Thread Safety in Java is a very important topic. Java provides multi-threaded environme ...

  6. Java 多线程线程安全(面试概念解答二)

    Java 多线程线程安全 什么是线程安全? 为什么有线程安全问题? 线程安全解决办法? 同步代码块 同步函数 静态同步函数 多线程死锁 多线程的三大特性 原子性 可见性 有序性 Java内存模型 Vo ...

  7. Java多线程【状态与安全问题】

    Java多线程[状态与安全问题]

  8. JAVA --- 多线程 -- 线程的创建

    JAVA - 多线程 – 线程的创建 线程的概念: 说起线程,先说程序和进程,多任务的概念. 程序(program):是指令和数据的有序集合,本身没有任何运行的含义,是一个静态的概念. 进程(proc ...

  9. Java多线程(线程创建、线程安全问题解决、线程状态)

    一.基础概念 1.并发和并行 2.进程与线程 进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多 个进程:进程也是程序的一次执行过程,是系统运行程序的基本单 ...

最新文章

  1. JavaScript instanceof 运算符深入剖析
  2. linux专业术语中英文,Linux专业术语中英文对照.doc
  3. lvs-nat负载均衡模式
  4. Linux集群和自动化维3.1 Python语言的应用领域
  5. 第9章例题 7-2 学生成绩排序
  6. Kafka Consumer多线程实例
  7. Linux IO原理和零拷贝机制
  8. javascript 中XMLHttpRequest 实现前台向后台的交互
  9. hdu 2546 饭卡 01背包
  10. 机器人技术基础pdf
  11. VS2013 应用程序无法正常启动0xc0150002
  12. 网络安全(加密技术、数字签名、证书)
  13. 用于细粒度图像分类的通道交互网络
  14. 芬兰手游业25年发展史
  15. ad16 怎么设置单独元件间距_AD软件中怎么添加不同元素之间的间距规则?
  16. 2017年IT人期末考试卷,能考60分就是自己人!
  17. 【Java设计模式】——单例模式
  18. Win10输入法移除未知区域设置(qad-Latn) 美式键盘
  19. 弥知AR试衣重磅上线!
  20. 面试说等通知是不是就凉了?

热门文章

  1. 利用向量叉积求三角形的面积(+STL:nth_element求第K大的数)
  2. 关于strlwr,strupr等函数在此作用域中尚未声明的问题
  3. java double 小数点后两位小数_Java中double类型的数据精确到小数点后两位
  4. 重启大法好!线上常见问题排查手册
  5. java中初始化的顺序_Java中 初始化的先后顺序?
  6. 手机游戏美术外包的四大优点及三大建议
  7. 为什么说Swift正在颠覆整个互联网生态?
  8. Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理:
  9. SpringBoot最简单服务配置
  10. MySQL复制常用拓扑结构详解