开发者社区> 问答> 正文

[@倚贤][¥20]线程有哪几种状态

线程有哪几种状态

展开
收起
黑琴白键 2018-10-30 00:06:12 2460 0
2 条回答
写回答
取消 提交回答
  • 全栈工程师,从事了 12 年以 Java 语⾔为主的软件开发工作,热衷于整合框架与开发工具,关注 交互设计,喜欢写技术博客(http://codelife.me/),Linux拥趸,问题终结者。近期开始学习和关注 Elixir 函数语言,合作翻译了《Elixir 程序设计》。

    单说状态直接看 API 就好了 https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.State.html

    NEW : 线程创建之后,但是还没有启动。

    RUNNABLE : 正在 Java 虚拟机下跑任务的线程的状态。

    BLOCKED: 阻塞状态,等待锁的释放,比如线程A进入了一个 synchronized 方法,线程B也想进入这个方法,但是这个方法的锁已经被线程A获取了,这个时候线程B就处于 BLOCKED 状态

    WAITING: 等待状态,处于等待状态的线程是由于执行了 3 个方法中的任意方法。

    1. Object的wait方法,并且没有使用timeout参数; 
    2. Thread的join方法,没有使用timeout参数 
    3. LockSupport的park方法。 

    处于 waiting 状态的线程会等待另外一个线程处理特殊的行为。 再举个例子,如果一个线程调用了一个对象的wait方法,那么这个线程就会处于waiting状态直到另外一个线程调用这个对象的notify或者notifyAll方法后才会解除这个状态。

    TIMED_WAITING: 有等待时间的等待状态,比如调用了以下几个方法中的任意方法,并且指定了等待时间,线程就会处于这个状态。

    1. Thread.sleep方法 
    2. Object的wait方法,带有时间 
    3. Thread.join方法,带有时间 
    4. LockSupport的 parkNanos 方法,带有时间 
    5. LockSupport的 parkUntil 方法,带有时间
    

    TERMINATED: 线程中止的状态,这个线程已经完整地执行了它的任务

    2019-07-17 23:11:06
    赞同 展开评论 打赏
  • 追求性能极限的人

    我不是专家,但我是知识的搬运工:https://blog.csdn.net/pange1991/article/details/53860651/

    2019-07-17 23:11:06
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载