• [译]线程生命周期-理解Java中的线程状态


    线程生命周期-理解Java中的线程状态

    在多线程编程环境下,理解线程生命周期和线程状态非常重要。

    在上一篇教程中,我们已经学习了如何创建java线程:实现Runnable接口或者成为Thread的子类,但启动一个java线程,则需要先创建一个Thread实例,然后调用此实例上的start(),这个线程就被启动了并会调用run()方法执行任务。

    线程状态

    下图展示了java线程中的几种不同状态,我们创建一个线程并启动它,但该线程何时从状态Runnable变为Running以及Blocked则取决于操作系统的线程调度实现,所以Java对状态变更是无能为力的。

    线程状态

    New

    当使用new操作创建一个新Thread实例时,我们说创建了一个New线程,此时线程并未激活,它只是Java编程时的一个内部状态。

    Runnable

    当在Thread实例上调用start()方法后,线程的状态变为了Runnable,并交由操作系统的线程调度器来调度线程执行。具体是立即运行该线程或是先把线程放入线程池中完全取决于OS线程调度器的实现。

    Running

    线程执行时,其状态变更为Running。线程调度器从Runnable线程池中取出一个线程,并把状态设置为Running,然后CPU就开始执行此线程。Running中的线程会由于时间片分配、线程执行完成或者等待获取资源等原因而变更为:Runnable、Dead或者Blocked状态。

    Blocked/Waiting

    线程可以通过thread join操作等待其他线程结束而把自己变为waiting状态,也可能因为一些资源不可用(例如IO资源不可用)而变成waiting状态,在生产者/消费者模式或等待者/通知者模式中就有因等待而变成waitting状态。当线程结束了等待,它就又变成Runnable并被重新放回Runnable线程池中。

    Dead

    当线程执行完成后,其状态就变为Dead了,也就是说该线程已不再存活。

    上面就是几种线程状态,理解线程的状态及变更条件对于理解线程的工作将会有很大的帮助。  

    源文链接:http://www.journaldev.com/1044/life-cycle-of-thread-understanding-thread-states-in-java

  • 相关阅读:
    Zookeeper 选举机制
    Hadoop Yarn任务调度器
    Hadoop Yarn工作机制 Job提交流程
    Hadoop 切片机制
    Hadoop MapReduce工作流程
    Hadoop HDFS读写数据流程
    数据仓库 拉链表
    高动态范围照片*5
    Java实现的窗口计算器
    拍摄制作星轨拖尾视频 之 前期拍摄
  • 原文地址:https://www.cnblogs.com/enjiex/p/3661438.html
Copyright © 2020-2023  润新知