Java多线程开发系列之三:线程这一辈子(线程的生命周期)
前文中已经提到了,关于多线程的基础知识和多线程的创建。但是如果想要很好的管理多线程,一定要对线程的生命周期有一个整体概念。本节即对线程的一生进行介绍,让大家对线程的各个时段的状态有一定了解。
线程的一生的状态过程
如下图:

| ① | 新建New---->就绪Runnable | 运行Start()方法 |
| ② | 就绪Runnable---->运行Running | 获得cpu资源 |
| ③ | 运行Running---->阻塞Blocked |
进入睡眠、 被挂起、 等待其他资源、 等待某个通知(后文会讲到)、 等待某个IO资源 |
| ④ | 阻塞Blocked---->就绪Runnable |
睡眠时间到、 挂起后被重新恢复、 等待资源已经被释放、 获取到其他线程的通知(后文会讲到)、 IO方法已经返回 |
| ⑤ | 运行Running---->就绪Runnable |
处理器放弃当前线程,处理其他线程去了 |
| ⑥ | 运行Running---->死亡Dead |
当前线程的执行体已经被运行结束、 当前线程抛出了无法解决的异常或错误 |
其它一些需要注意的地方:
(1)线程启动后,并不会立刻运行,具体运行时间要看虚拟机的调度(前文中有讲)
(2)线程一旦死亡就不能再重新启动就绪(使用Start方法),如果强制启动会抛出异常。
(3)想判断当前的线程是否已经被启动并且还未死亡(就绪、运行、阻塞),可以使用isAlive()方法判断
(4)启动线程进入就绪状态请务必使用Start()方法启动,而非Run方法,原因在创建多线程时也曾经讲过。
(5)线程一旦启动,大家都是独立的处理,并不会因为父线程(创建并启动子线程的线程)出现某种状态,而影响到自身(如父线程死亡后,子线程仍然会继续运行)。
Java多线程开发系列之三:线程这一辈子(线程的生命周期)的更多相关文章
- Java多线程开发系列之番外篇:事件派发线程---EventDispatchThread
事件派发线程是java Swing开发中重要的知识点,在安卓app开发中,也是非常重要的一点.今天我们在多线程开发中,穿插进来这个线程.分别从线程的来由.原理和使用方法三个方面来学习事件派发线程. 一 ...
- Java多线程开发系列之一:走进多线程
对编程语言的基础知识:分支.选择.循环.面向对象等基本概念理解后,我们需要对java高级编程有一定的学习,这里不可避免的要接触到多线程开发. 由于多线程开发整体的系统比较大,我会写一个系列的文章总结介 ...
- Java多线程开发系列之四:玩转多线程(线程的控制2)
在上节的线程控制(详情点击这里)中,我们讲解了线程的等待join().守护线程.本节我们将会把剩下的线程控制内容一并讲完,主要内容有线程的睡眠.让步.优先级.挂起和恢复.停止等. 废话不多说,我们直接 ...
- Java多线程开发系列之四:玩转多线程(线程的控制1)
在前文中我们已经学习了:线程的基本情况.如何创建多线程.线程的生命周期.利用已有知识我们已经可以写出如何利用多线程处理大量任务这样简单的程序.但是当应用场景复杂时,我们还需要从管理控制入手,更好的操纵 ...
- Java多线程开发系列之二:如何创建多线程
前文已介绍过多线程的基本知识了,比如什么是多线程,什么又是进程,为什么要使用多线程等等. 在了解了软件开发中使用多线程的基本常识后,我们今天来聊聊如何简单的使用多线程. 在Java中创建多线程的方式有 ...
- Java多线程开发系列之五:Springboot 中异步请求方法的使用
Springboot 中异步线程的使用在过往的后台开发中,我们往往使用java自带的线程或线程池,来进行异步的调用.这对于效果来说没什么,甚至可以让开发人员对底层的状况更清晰,但是对于代码的易读性和可 ...
- [转]Java多线程干货系列—(一)Java多线程基础
Java多线程干货系列—(一)Java多线程基础 字数7618 阅读1875 评论21 喜欢86 前言 多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,所以学好多线程并发编程对我们 ...
- Java多线程开发技巧
很多开发者谈到Java多线程开发,仅仅停留在new Thread(...).start()或直接使用Executor框架这个层面,对于线程的管理和控制却不够深入,通过读<Java并发编程实践&g ...
- “全栈2019”Java多线程第二十二章:饥饿线程(Starvation)详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
随机推荐
- grunt 一个目录下所有的js文件压缩 配置收藏
module.exports = function(grunt){ // 项目配置 grunt.initConfig({ pkg: grunt.file.readJSON('package.json' ...
- 不注册Activex 直接调用它
此处的Activex是ATL方式的. [ComVisible(false)] [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnk ...
- FLEX各种特效集合
http://www.noupe.com/adobe/flex-developers-toolbox-free-components-themes-and-tutorials.html经典中的经典 h ...
- React native 的弹出层(输入)效果
/*弹出层测试*/ import React,{Component} from 'react'; import { StyleSheet, View, Image, Text, TouchableOp ...
- JavaScript对寄生组合式继承的理解
有关JavaScript的几种继承方式请移步JavaScript的几种继承方式 原型链的缺陷 SubType.prototype = new SuperType(); 这样做的话,SuperType构 ...
- DOM相关属性,方法,兼容性问题处理小析
DOM:Document Object Model文档对象模型,用于让程序(js)取操作页面中的元素.DOM节点类型有12种. (一)属性 一.子节点操作1.所有子节点(1)元素.childNodes ...
- 榮耀6 Plus將是一部沒有對手的手機
華為榮耀官方微博發佈消息正式確定了年度旗艦新品將命名為榮耀6 Plus,據稱,該機將是“2014年度最最旗艦手機”,並將集“科學與美學一身”.“探索幾何與視覺極限”,同時,官方微博還不低調地宣稱該機將 ...
- 关于BeanUiles.copyPropertis()的用法
最近的项目遇到BeanUiles.copyPropertis(),大大的简化了代码量.用hibernate从数据库中映射的实体类,与pojo对象进行转换,传统做法 Object obj = baseD ...
- x86架构手机跑安卓好吗?(脑补)
华硕低价位手机ZenFone一推出就掀起市场话题,许多人也对ZenFone所采用的Intel Atom处理器有所意见,深怕其相容性问题无法正确执行应用程式App,这究竟是怎么回事呢? Intel近几年 ...
- 微信 {"errcode":40029,"errmsg":"invalid code, hints: [ req_id: Cf.y.a0389s108 ]"}
{"errcode":,"errmsg":"invalid code, hints: [ req_id: Cf.y.a0389s108 ]" ...