`
春花秋月何时了
  • 浏览: 39986 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Java线程状态与生命周期

 
阅读更多

线程生命周期示意图:



 

线程的状态:

1. 初始状态(New)

当创建了线程对象实例 即 new Thread(...) 之后,线程进入初始状态,注意这个时候,它还仅仅是一个普通的对象实例,而不是真正的线程,JVM也不会分配相应的资源,例如栈内存空间。

 

2. 可运行状态/就绪状态(Runnable)

调用了start()方法之后,线程位于“可运行线程池”中,变得可运行也即就绪,只等待获取CPU的使用权即在就绪状态的进程除CPU之外,其它的运行所需资源都已全部获得。

 

3. 运行状态(Running)

就绪状态的线程被操作系统选中,获取了CPU时间片,执行程序代码即进入运行状态。

运行状态的线程如果执行了yield()方法,出让了CPU,就会回到就绪状态,这时候与其他线程处于同等竞争状态,但如果操作系统没有忽略线程的优先级设定,那么比该线程优先级高的线程才能获得CPU的调度执行,如果没有则依然会再次调度该线程执行。

 

4. 阻塞状态(Blocked)

线程由于某种原因放弃了CPU使用权,暂时停止执行,即为阻塞状态,阻塞状态的线程必须重新进入就绪状态,才有机会重新转到运行状态。阻塞的情况分下面几种:

(1)、等待阻塞(WAITING):运行的线程执行了wait()方法,JVM释放该线程占用的所有资源,并将其放入“等待队列/等待池”,进入该状态的线程不能自动唤醒,必须依靠其他线程调用notify()或notifyAll()方法才能被唤醒。

(2)、同步阻塞(BLOCKED):运行的线程若在需要获取同步锁(如synchronized等)时,发现同步锁已经被其他线程占用,则JVM会把该线程放入“锁池”中,锁池中以列队的形式(即先到先得)存放着所有正在等待相同同步锁的线程,一旦获得需要的同步锁对象标记,就转入就绪状态。

(3)、其他阻塞(TIMED_WAITING):当运行的线程调用了自身的sleep()方法、或者其他线程的join()方法、或者发生了I/O请求阻塞,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

(4)、线程挂起:运行的线程执行了suspend()方法之后,线程进入阻塞状态,并且不能自动恢复,需要调用其resume()方法,才能使线程重新进入就绪状态。

 

5. 终止状态(Terminated)

 线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

  • 大小: 86.2 KB
分享到:
评论

相关推荐

    Java多线程(二)、线程的生命周期和状态控制

    Java多线程(二)、线程的生命周期和状态控制

    Java线程的生命周期和状态控制[定义].pdf

    Java线程的生命周期和状态控制[定义].pdf

    java多线程笔记

    四、线程的状态转换和生命周期 4 Java线程:创建与启动 7 Java线程:线程名称的设定及获取 10 Java线程:线程栈模型与线程的变量 12 Java线程:线程的调度-休眠 13 Java线程:线程的调度-优先级 16 Java线程:线程的...

    设计滚动字演示线程状态及改变方法

    设计滚动字演示线程状态及改变方法

    Java线程的生命周期和状态控制_动力节点Java学院整理

    主要介绍了Java线程的生命周期和状态控制,需要的朋友可以参考下

    (完整版)Java程序设计任务驱动式教程-任务二十八-线程的生命周期与优先级(线程的状态与调度).ppt

    (完整版)Java程序设计任务驱动式教程-任务二十八-线程的生命周期与优先级(线程的状态与调度).ppt

    图解Java线程的生命周期

    本文主要介绍了Java中线程的5种状态(新建(New)、就绪(Runable)、运行(Running)、阻塞(Blocked)和死亡(Dead))之间的转换图解,有需要的朋友可以参考下

    实验八:Java多线程

    本次实验了解线程与进程的概念、区别与联系,掌握了多线程的内涵与使用场景,掌握了线程的状态与生命周期,掌握了Java实现多线程的两种方式,理解了临界区、对象锁、互斥、同步等核心概念,理解了线程的互斥与同步,...

    java并发编程:线程基础

    线程的生命周期: 解释线程的生命周期,包括新建、就绪、运行、阻塞和终止等状态。探讨线程在不同状态间的转换和原因。 线程的优先级和命名: 介绍线程的优先级概念,解释如何设置线程的优先级。讲解线程命名的重要...

    JAVA多线程

    Java 中的线程与进程 1、程序、进程与线程 2、线程的状态与生命周期

    上海某大厂java面试真题与解析

    #Java线程状态 #并发控制" 5、"利用CyclicBarrier和CountDownLatch解决并发协调难题,提升多线程程序的执行效率和可控性。#并发工具类 #Java并发编程" 6、"volatile与synchronized的巧妙运用,确保数据可见性,...

    43道Java多线程高频题整理(附答案背诵版).md

    这份《43道Java多线程高频题整理(附答案背诵版)》资源是一份专门针对Java多线程编程的高频考题集,旨在帮助Java开发者...1. **线程的基本概念**:介绍线程的生命周期、线程状态、以及如何创建和启动线程,包括继承`Thre

    一篇文章弄懂Java多线程基础和Java内存模型

    文章目录一、多线程的生命周期及五种基本状态二、Java多线程的创建及启动1.继承Thread类,重写该类的run()方法2.通过实现Runnable接口创建线程类3.通过Callable和Future接口创建线程三、Java内存模型概念四、内存间...

    多线程编程

    讲解java线程的概念、线程的生命周期及线程管理技巧,内容包括线程创建 、线程状态、线程死锁与规避技巧、线程通信等,内容通俗易懂,是学习JAVA线程技术很有帮助的参考资料。

    java多线程编程之线程的生命周期

    线程要经历开始(等待)、运行、挂起和停止四种不同的状态。这四种状态都可以通过Thread类中的方法进行控制。下面给出了Thread类中和这四种状态相关的方法

    Java中的线程Thread总结

     线程的生命周期:  1.新建状态(New):用new语句创建的线程对象处于新建状态,此时它和其它的java对象一样,仅仅在堆中被分配了内存  2.绪状态(Runnable):当一个线程创建了以后,其他的线程调用了它的

    【资源免费下载】Java代码积累丨大话设计模式(Java实现版本)、线程协作

    演示线程的生命周期 生产者-消费者 设计模式参考《大话设计模式》 工厂简单模式 创造型模式 工厂方法模式 抽象工厂模式 原型模式 建造者模式 单例模式 结构型模式 队列模式 桥接模式 组合模式 装饰模式 外观模式 享...

    Java并发编程基础.pdf

    线程与线程状态:理解Java中线程的基本概念,包括线程的创建、启动、暂停、恢复和终止。熟悉线程的生命周期及其不同状态,如新建、就绪、运行、阻塞和死亡。 线程同步与通信:掌握Java中的同步机制,如synchronized...

    JavaSE_6_多线程

    进程与线程的区别,线程的操作状态,线程的操作方法,线程的同步与死锁,线程经典案例,生产者-消费者,现线程的生命周期

    实验一Android环境构建与Activity生命周期.doc

    实验一Android环境构建与Activity生命周期 【目的】 安装智能手机开发相关软件平台,并在此基础上测试Activity的生命周期过程。 【要求】 1. 完成智能手机开发平台安装、以及相关配置; 2. 并实现Hello World; 3. ...

Global site tag (gtag.js) - Google Analytics