A thread state. A thread can be in one of the following states:

  • NEW 刚实例化
    A thread that has not yet started is in this state.
  • RUNNABLE
    A thread executing in the Java virtual machine is in this state.
  • BLOCKED
    A thread that is blocked waiting for a monitor lock is in this state.
  • WAITING
    A thread that is waiting indefinitely for another thread to perform a particular action is in this state.
  • TIMED_WAITING
    A thread that is waiting for another thread to perform an action for up to a specified waiting time is in this state.
  • TERMINATED
    A thread that has exited is in this state.

阻塞状态

  •   阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。知道线程进入就绪状态,才有机会转到运行状态。
  • 阻塞的情况分三种
    •   等待阻塞:运行的线程执行wait()方法,该线程会释放占用的所有资源,JVM会把该线程放入“等待池”中。进入这个状态后,是不能自动唤醒的,必须依靠其他线程调用notify()或notifyAll()方法才能被唤醒
    • 同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入“锁池”中。
    • 其他阻塞:运行的线程执行sleep()方法或join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。

sleep和wait的区别

sleep 没有释放锁,进去等待队列 TIME_WAITING 状态。等时间到了时候,再次进入ready状态,等待时间片就可以运行

sleep可以在任何地方调用。

wait 需要在实例方法中的同步块中执行,不能在静态发方法调用,因为wait是类Object的实例方法,wait调用后,会放弃对象锁,进入等待队列。等待调用notify/notifyAll方法后,会进入锁池(同步队列中),竞争到锁后,才进入runnable状态。


https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.State.html​docs.oracle.comJava线程的6种状态及切换(透彻讲解)_Java_潘建南的博客-CSDN博客​blog.csdn.net

java 线程状态_Java线程的状态相关推荐

  1. java 线程状态_JAVA线程漫谈:线程状态与状态转换解析

    线程使用方式 JDK线程的顶层抽象是Runnable接口,本质上,线程相关的类都是基于Runnable和Thread实现类实现. JDK API级别有不同的创建线程的方式,但本质是还是基于Runnab ...

  2. java 线程状态_Java线程为何没有Running状态?我猜你不知道。

    作者:国栋原文:https://my.oschina.net/goldenshaw/blog/705397 Java虚拟机层面所暴露给我们的状态,与操作系统底层的线程状态是两个不同层面的事.具体而言, ...

  3. java线程池返回线程状态_Java线程的不同状态

    java线程池返回线程状态 介绍 在Java中,线程可以具有状态. Thread.State枚举定义Java线程可以具有的不同状态. 该枚举定义了以下值– 新 可运行 已封锁 等候 TIMED_WAI ...

  4. 线程打印状态_Java线程状态的转换

    根据上面关于线程状态的介绍我们可以得到下面的线程状态转换图: BLOCKED与RUNNABLE状态的转换 我们在上面说到:处于BLOCKED状态的线程是因为在等待锁的释放.假如这里有两个线程a和b, ...

  5. java线程触发_java线程

    线程. 状态 新建状态(New): 当用 new 操作符创建一个线程时, 例如 new Thread(r),线程还没有开始运行,此时 线程处在新建状态. 当一个线程处于新生状态时,程序还没有开始运行线 ...

  6. java 线程交互_java 线程交互之wait/notify

    众所周知java支持多线程,有多线程就必然会存在多线程的交互,交互方式有多种,比如通过共享数据,或者通过提供的锁信号量等等,这里通过用wait以及notify实现线程交互. 要用好线程的wait和no ...

  7. java多线程抽奖_java 线程池、多线程并发实战(生产者消费者模型 1 vs 10) 附案例源码...

    导读 前二天写了一篇<Java 多线程并发编程>点我直达,放国庆,在家闲着没事,继续写剩下的东西,开干! 线程池 为什么要使用线程池 例如web服务器.数据库服务器.文件服务器或邮件服务器 ...

  8. java中我爱你_Java线程学习(转)

    编写具有多线程能力的程序经常会用到的方法有: run(),start(),wait(),notify(),notifyAll(),sleep(),yield(),join() 还有一个重要的关键字:s ...

  9. idea 线程内存_Java线程池系列之-Java线程池底层源码分析系列(一)

    课程简介: 课程目标:通过本课程学习,深入理解Java线程池,提升自身技术能力与价值. 适用人群:具有Java多线程基础的人群,希望深入理解线程池底层原理的人群. 课程概述:多线程的异步执行方式,虽然 ...

  10. java 线程不足_Java 线程基础知识

    wait() 和notify().notifyAll() 这三个方法用于协调多个线程对共享数据的存取,所以必须在 Synchronized 语句块内使用这三个方法,否则会抛出错 IllegalMoni ...

最新文章

  1. redmine mysql配置_Redmine安装指南一:railsinstaller+apache+mysql(推荐)
  2. Obtain a Permutation(思维)
  3. mysql 图片转为二进制_php 图片转为二进制数据的方法
  4. CALayer的属性和使用
  5. Vue中使用echarts图表插件
  6. Linux使用SSH上传下载文件,linux下用ssh上传,下载文件
  7. 「Leetcode」142.环形链表II:环找到了,那入口呢?
  8. arraylist 初始化_ArrayList 和 LinkedList 哪个更占空间?
  9. 瑞星服务器版序列号 2009,瑞星序列号2009 瑞星杀毒软件序列号和ID
  10. 调和方程(拉普拉斯方程)基本解和边界元方法的积分计算
  11. 如何把pdf转换成ezd_怎么把pdf文档转换成word
  12. 怎么把pdf用abobe转换成html,Adobe Acrobat:把网页转换为PDF
  13. Linux内核调试方法
  14. php 分布式事务 DTM (TCC模式和Saga模式的区别)
  15. 北京市高等教育英语听力计算机考试,北京市2018年高考英语听力机考问答
  16. Java工作流管理系统(activity6.0)
  17. MPU6050读取数据FIFO溢出问题
  18. 计算机休眠是打不开,电脑自动进入睡眠模式打不开是为什么
  19. 让人春分日 哈工科教100798.宇宙总统
  20. Windows 11 家庭版、专业版、企业版、教育版、SE 版之间的区别

热门文章

  1. 【面试】排序算法整理
  2. Pytorch squeeze() 和 unsqueeze() 方法区别
  3. python open w_python-文件操作示例
  4. WSL2支持GPU使用docker
  5. 最好用16进制工具wxHexEditor
  6. Win10升级到最新版本
  7. Video for linux 2 example (v4l2 demo)
  8. 长时间工作意味着什么
  9. android之修改gradle源
  10. 远程桌面连接-GPU加速