Java 多线程(三) 线程的生命周期及优先级

线程的生命周期

  线程的生命周期:一个线程从创建到消亡的过程。

  如下图,表示线程生命周期中的各个状态:

  

  线程的生命周期可以分为四个状态:

1.创建状态:

  当用new操作符创建一个新的线程对象时,该线程处于创建状态。

  处于创建状态的线程只是一个空的线程对象,系统不为它分配资源。

  

2.可运行状态:

  执行线程的start()方法将为线程分配必须的系统资源,安排其运行,并调用线程体——run()方法,这样就使得该线程处于可运行状态(Runnable)。

  这一状态并不是运行中状态(Running),因为线程也许实际上并未真正运行。

  

3.不可运行状态:

  当发生下列事件时,处于运行状态的线程会转入到不可运行状态:

  调用了sleep()方法;

  线程调用wait()方法等待特定条件的满足;

  线程输入/输出阻塞。

  返回可运行状态:

  处于睡眠状态的线程在指定的时间过去后;

  如果线程在等待某一条件,另一个对象必须通过notify()或notifyAll()方法通知等待线程条件的改变;

  如果线程是因为输入输出阻塞,等待输入输出完成。

  

4.消亡状态:

  当线程的run()方法执行结束后,该线程自然消亡。

线程的优先级

  1.线程的优先级及设置

  线程的优先级是为了在多线程环境中便于系统对线程的调度,优先级高的线程将优先执行。

  一个线程的优先级设置遵从以下原则

  线程创建时,子继承父的优先级。

  线程创建后,可通过调用setPriority()方法改变优先级。

  线程的优先级是1-10之间的正整数。

  1- MIN_PRIORITY

  10-MAX_PRIORITY

  5-NORM_PRIORITY

  如果什么都没有设置,默认值是5。

  但是不能依靠线程的优先级来决定线程的执行顺序。

  2.线程的调度策略

  线程调度器选择优先级最高的线程运行。但是,如果发生以下情况,就会终止线程的运行:

  线程体中调用了yield()方法,让出了对CPU的占用权。

  线程体中调用了sleep()方法,使线程进入睡眠状态。

  线程由于I/O操作而受阻塞。

  另一个更高优先级的线程出现。

  在支持时间片的系统中,该线程的时间片用完。

参考资料

  圣思园张龙老师Java SE系列视频教程。

Java 多线程(三) 线程的生命周期及优先级相关推荐

  1. JAVA多线程技术-线程的生命周期

    当线程被创建并启动后,它既不是一启动就进入了执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建(New).就绪(Ready).运行(Running).阻塞(Blocked).和死亡(D ...

  2. java中线程调度遵循的原则_Java 多线程(三) 线程的生命周期及优先级

    线程的生命周期 线程的生命周期:一个线程从创建到消亡的过程. 如下图,表示线程生命周期中的各个状态: 线程的生命周期可以分为四个状态: 1.创建状态: 当用new操作符创建一个新的线程对象时,该线程处 ...

  3. 线程(线程基本概念、java实现多线程、使用多线程、线程的生命周期、线程同步、线程死锁)

    (一)线程基本概念 一. 程序, 进程, 线程的概念 程序: 使用某种语言编写一组指令(代码)的集合,静态的 进程: 运行的程序,表示程序一次完整的执行, 当程序运行完成, 进程也就结束了 个人电脑: ...

  4. 【多线程】线程的生命周期

    搞懂生命周期中各个节点的状态转换机制. 通用的线程生命周期 初始状态:指的是线程已经被创建,但是还不允许分配CPU执行.(这里的被创建,仅仅是在编程语言层面被创建,而在操作系统层面,真正的线程还没有创 ...

  5. 多线程——线程的生命周期

    线程状态: 与人有生老病死一样,线程也同样要经历新建.就绪.运行(活动).阻塞和死亡五种不同的状态.这五种状态 都可以通过Thread类中的方法进行控制.创建并运行线程: ① 新建状态(New Thr ...

  6. java 多线程编程(包括创建线程的三种方式、线程的生命周期、线程的调度策略、线程同步、线程通信、线程池、死锁等)

    1 多线程的基础知识 1.1 单核CPU和多核CPU 单核CPU,其实是一种假的多线程,因为在一个时间单元内,也只能执行一个线程的任务.微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那 ...

  7. Java 多线程— 线程的生命周期及方法

    2019独角兽企业重金招聘Python工程师标准>>> 这篇博客介绍线程的生命周期. 线程是一个动态执行的过程,它也有从创建到死亡的过程. 线程的几种状态 在 Thread 类中,有 ...

  8. (二)Java线程与系统线程,生命周期

    本专栏多线程目录: (一)线程是什么 (二)Java线程与系统线程和生命周期 (三)Java线程创建方式 (四)为什么要使用线程池 (五)四种线程池底层详解 (六)ThreadPoolExecutor ...

  9. java main生命周期_Java从入门到入土(62)线程的生命周期

    线程是程序内部的一个顺序控制流,他具有一个特定的生命周期.在一个线程的生命周期中,他总是处于某一种状态中.线程的状态表示了线程正在进行的活动以及在这段时间内线程能完成的任务. 线程的生命周期包括五个状 ...

最新文章

  1. android运行过程简书,Android系统的启动流程
  2. 60+应用,哪款是你最爱?
  3. 天冷了,大家如果有往年的不穿的衣服别扔,寄给需要的人好吗?
  4. 利用日志传送实现高可用性
  5. iOS 12.0-12.1.2 完整越狱支持 Cydia
  6. 洛谷.4897.[模板]最小割树(Dinic)
  7. 想办法解决window刷新的问题
  8. python最简分数_592. 分数加减法运算(Python)
  9. mysql 存储微信昵称乱码_MYSQL 保存微信昵称特殊字符报错解决方法-设置编码集为utf8mb4的方法...
  10. 拥有一个高性能低延时数据库是什么样的体验?
  11. emacs php 支持,emacs支持golang吗
  12. QQ群会员彩色昵称代码
  13. UniWebView3.8
  14. html下拉和收起,Vue中实现菜单下拉、收起的动画效果
  15. 目标检测经典论文详解
  16. LoveChat独立部署即时通讯IM(前台后台不开源)聊天APP
  17. 计算机网络实验:无线组网
  18. 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)
  19. DOH(DNS-over-HTTPs)服务器搭建
  20. C# 之 Math取整数

热门文章

  1. nginx配置文件nginx.conf
  2. IDEA系列(四)一部署war 和 war exploded的区别
  3. 线程的基本协作和生产者消费者
  4. win7win10 配置wlan热点
  5. hibernate多对一单向外键
  6. Xcode debug时如何查看内存中的数据
  7. Oracle 随机获取N条数据
  8. 如何正确创建DLL和使用DLL
  9. 也说翟鸿燊忽悠的一面
  10. TreeView 实现单选与多选!