`
chinese.darren
  • 浏览: 98568 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

线程的7种状态及相互转换

    博客分类:
  • JAVA
阅读更多

今天有同事问到线程的问题,自己突然就有点蒙了,只模糊的记得个大概。
当初学习线程的时候把这7个状态记得比自己名字还熟悉
还把这7个状态编成了一段凄惨而美丽的爱情故事
没想到如今却只能记得个大概
真验证了“好记性不如烂笔头”的真理
还是赶快回忆一下吧

先从图片开始


小小的作下解释:
1、线程的实现有两种方式,一是继承Thread类,二是实现Runnable接口,但不管怎样,当我们new了这个对象后,线程就进入了初始状态

2、当该对象调用了start()方法,就进入可运行状态

3、进入可运行状态后,当该对象被操作系统选中,获得CPU时间片就会进入运行状态

4、进入运行状态后情况就比较复杂了

    4.1、run()方法或main()方法结束后,线程就进入终止状态

    4.2、当线程调用了自身的sleep()方法或其他线程的join()方法,就会进入阻塞状态(该状态既停止当前线程,但并不释放所占有的资源)。当sleep()结束或join()结束后,该线程进入可运行状态,继续等待OS分配时间片;

    4.3、线程调用了yield()方法,意思是放弃当前获得的CPU时间片,回到可运行状态,这时与其他进程处于同等竞争状态,OS有可能会接着又让这个进程进入运行状态;

   4.4、当线程刚进入可运行状态(注意,还没运行),发现将要调用的资源被synchroniza(同步),获取不到锁标记,将会立即进入锁池状态,等待获取锁标记(这时的池里也许已经有了其他线程在等待获取标记,这时它们处于队列状态,既先到先得),一旦线程获得标记后,就转入可运行状态,等待OS分配CPU时间片;

   4.5、当线程调用wait()方法后会进入等待队列(进入这个状态会释放所占有的所有资源,与阻塞状态不同),进入这个状态后,是不能自动唤醒的,必须依靠其他线程调用notify()或notifyAll()方法才能被唤醒(由于notify()只是唤醒一个线程,但我们由不能确定具体唤醒的是哪一个线程,也许我们需要唤醒的线程不能够被唤醒,因此在实际使用时,一般都用notifyAll()方法,唤醒有所线程),线程被唤醒后会进入锁池,等待获取锁标记。

总算全部回忆了一遍JDK1.5在API的使用上有了较好的改进,效率得到很大的提高,不过几个状态转换的原理还是一样。

转自:itniwo

分享到:
评论

相关推荐

    Java多线程编程总结

    Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 Java线程:线程的调度-让步 Java线程:线程的调度-合并 Java线程:线程的...

    线程安全代码

    一个进程可以包含若干线程,线程可以帮助应用程序同时做几件事(比如一个线程向磁盘写入文件,另一个则接收用户的按键操作并及时做出反应,互相不干扰)。进程也有运行、阻塞、就绪三种状态,并随一定条件而相互转化。

    Java-线程状态和等待唤醒机制和线程池

    线程一共有6中状态,相互之间可以互相转换。 等待唤醒案例(线程之间的通信) 实现: 等待唤醒案例:线程之间的通信 创建一个顾客线程(消费者):告知老板要的包子的种类和数量,调用wait方法,放弃cpu的执行,进入到...

    多线程面试题.docx

    线程的六种状态以及相互转换 1.新建(new) 2.运行(Runnable)[就绪和运行统称为运行] 3.阻塞(Blocked) 4.等待(Waiting) 5.超时等待(time_waiting) 6.终止状态(terminated) 状态转换:

    JAVA并发编程分享

    线程状态以及相互之间的转换 JMM(java Memory Model)存在的意义及对并发的处理 监视器锁/显示锁、可重入/独占/共享/自旋锁之间的区别与联系 常见各种死锁以及解决方法和思路 JDK中的J、U、C框架介绍(主要包括...

    《Delphi7编程100例》代码

    《Delphi7编程100例》代码目录:---------------------------------------------ToolBar工具栏控件的使用动态建立主菜单选项窗口界面的动态分隔条动态设置选项卡页面在标题栏中自定义按钮窗体开合窗帘效果Windows XP...

    Delphi7 编程 100 实例

    ToolBar工具栏控件的使用 动态建立主菜单选项 窗口界面的动态分隔条...种滤镜效果 图形朦胧叠合显示技巧 给MDI主窗体增加背景 实现图像的淡入淡出显示 多媒体播放器 播放AVI文件 根据客户端IP...

    浅谈Java中的锁

    锁在并发编程中的重要性不言而喻, 但是如何更好地选择, 下面借几个问答来开始吧! 后续我会再写一篇有...  不熟悉线程的生命周期和相互的转换控制, 是无法写好并发代码的.  图简单易懂, 主要是搞清楚, sl

    Delphi7编程100例

    实现多线程IP和DomainName相互转换 Windows2000下的Popup发送功能 如何实现Ping操作 实现多线程共享探测 实现Windows95/98的I/O端口读写 收发电子邮件与监视网络服务器资源 使用WebBrower制作浏览器 ...

    Java面试宝典2020修订版V1.0.1.doc

    10、线程状态 59 启动线程的方式?start or run? 59 11、什么是java序列化,如何实现java序列化? 59 12、编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad。...

    VC++常用功能实例

    问:如何在线程中处理状态条? 83 问:如何阻止WINDOWS关闭? 83 问:如何使一个按钮Disable? 83 问:怎样从MFC扩展动态链结库(DLL)中显示一个对话框? 84 问:想隐藏用户界面怎么办? 85 问:如何实现SDI与MDI的转换? 85...

    VC++常用的共用函数100多页

    问:如何在线程中处理状态条? 83 问:如何阻止WINDOWS关闭? 83 问:如何使一个按钮Disable? 83 问:怎样从MFC扩展动态链结库(DLL)中显示一个对话框? 84 问:想隐藏用户界面怎么办? 85 问:如何实现SDI与MDI的转换? 85...

    Delphi7.精彩编程百例81-100

    实例81 Query控件的使用 实例82 数据中导入文本文件 实例83...状态 实例93 局域网上共享文件资源的下载 实例94 实时监控邮箱新邮件 实例95 通过SMPT服务器发送邮件 实例96 IP地址框的编辑...

    CLR via C# 3rd Edition

    然后,研究了CLR异步编程模型、我的AysncEnumerator类、APM和异常、应用程序和线程模型、实现了一个异步服务、APM和Compute-bound操作、APM、I/O请求优先级、将APM转换为Task、基于事件的异步模式、programming ...

    JSF入门级资料 学习笔记

    2.多用户访问时,需要处理线程安全、数据验证、转换处理等问题。 3.展示逻辑和处理逻辑胶合在一起,出现各种不统一的标签与框架。 4.界面人员、应用程序开发人员,组件人员三类人员彼此合作不协调,互相干扰。 而...

    delphi7编程百例

    ToolBar工具栏控件的使用 动态建立主菜单选项 窗口界面的动态...种滤镜效果 图形朦胧叠合显示技巧 给MDI主窗体增加背景 实现图像的淡入淡出显示 多媒体播放器 播放AVI文件 根据...

    psqlodbc8.01.02++

    POSTGRESQL 让客户端互相通信 <br/>在客户端/服务器的工作模式下,客户机处于主动状态,发送请求给监听状态的服务器,后者处理后再将结果返回给客户机。 在这种工作模式下,客户端只与服务端联系,因为它不...

    Java典型模块

    20.3.2 过滤流实现字节和字符相互转换类 20.3.3 过滤流特定数据类型类 20.3.4 过滤流对象序列化类 20.3.5 过滤流打印类 20.4 小结 第21章 查找和替换项目(GUI+字符串处理) 21.1 查找和替换原理 21.1.1 项目结构...

    电科大20秋《计算机操作系统》在线作业2.docx

    A:应用软件 B:硬件的扩充 C:用户软件 D:系统软件 答案:D 进程状态由就绪状态转化到运行状态是由( )。 A:中断事件 B:进程自行状态转换 C:进程调度 电科大20秋《计算机操作系统》在线作业2全文共8页,当前为第5页...

    CLR.via.C#.(中文第3版)(自制详细书签)Part1

    14.6 编码:字符和字节的相互转换 14.6.1 字符和字节流的编码和解码 14.6.2 Base-64字符串编码和解码 14.7 安全字符串 第15章 枚举类型和位标志 15.1 枚举类型 15.2 位标志 15.3 向枚举类型添加方法 第16章...

Global site tag (gtag.js) - Google Analytics