线程的生命周期

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

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

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

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中线程调度遵循的原则_Java 多线程(三) 线程的生命周期及优先级相关推荐

  1. java中线程调度遵循的原则_深入理解Java多线程核心知识:跳槽面试必备

    多线程相对于其他 Java 知识点来讲,有一定的学习门槛,并且了解起来比较费劲.在平时工作中如若使用不当会出现数据错乱.执行效率低(还不如单线程去运行)或者死锁程序挂掉等等问题,所以掌握了解多线程至关 ...

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

    Java 多线程(三) 线程的生命周期及优先级 线程的生命周期 线程的生命周期:一个线程从创建到消亡的过程. 如下图,表示线程生命周期中的各个状态: 线程的生命周期可以分为四个状态: 1.创建状态: ...

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

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

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

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

  5. java不同进程的相互唤醒_JAVA多线程之线程间的通信方式

    一,介绍 本总结我对于JAVA多线程中线程之间的通信方式的理解,主要以代码结合文字的方式来讨论线程间的通信,故摘抄了书中的一些示例代码. 二,线程间的通信方式 ①同步 这里讲的同步是指多个线程通过sy ...

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

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

  7. java for(o t :object) 获取顺序号_java中线程的生命周期

    线程是java中绕不过去的一个话题, 今天本文将会详细讲解java中线程的生命周期,希望可以给大家一些启发. java中Thread的状态 java中Thread有6种状态,分别是: NEW – 新创 ...

  8. java main是多线程的吗_Java多线程之线程及其常用方法

    创建线程和常用方法 进程与线程的概念进程 进程是程序执行时的一个实例.程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它分配CPU时间,程序开 ...

  9. java中线程的生命周期_Java中的线程生命周期– Java中的线程状态

    java中线程的生命周期 Understanding Thread Life Cycle in Java and Thread States are very important when you a ...

最新文章

  1. powerbi visualization
  2. Super-palindrome(思维)
  3. C++vector容器-容量和大小
  4. 2.MySQL中的索引
  5. Excel中的变量 「 Ctrl + F3 」 查看
  6. 使用Node.JS,如何将JSON文件读入(服务器)内存?
  7. Hough(霍夫变换) 基于Opencv2.4.9 和VS2012平台下编写
  8. 从 ASCII 到 UTF-8 : 大话编码
  9. IE9父容器overflow:auto时,子容器状态更改导致滚动条下出现额外空间的问题探讨...
  10. 500状态码_教你玩转HTTP—状态码
  11. 山东大学操作系统课设
  12. lnmp一键安装的步骤
  13. 机器人工程师技术资料
  14. HTML技术(基础/列表/表格/表单)
  15. 粤语学习笔记(二)万门大学第6课完
  16. 使用pgAdmin把Excel文件导入PostgreSql数据库
  17. 警告:Named Route ‘Main‘ has a default child route. When navigating to this named route
  18. iNFTnews|一键生成数字藏品,VERTU Web3手机是未来吗?
  19. 11步,教你创建深度学习聊天机器人
  20. 线程安全——strtok VS strtok_r

热门文章

  1. 【kafka】kafka Group coordinator lookup for group
  2. 【Mac】mac 安装 Redis可视化工具-Redis Desktop Manager
  3. 95-136-043-源码-Operator-LegacyKeyedCoProcessOperator
  4. datx 开启debug
  5. 02-windows下elasticsearch安装elasticsearch-head
  6. 让美团、京东、搜狐都说好的数据仓库,牛在哪?
  7. C# WinFrom 用Execl做模版进行数据导入简介
  8. android 没有 layout_above,在RelativeLayout布局中layout_above不起作用
  9. 它在计算机房的旁边英文,计算机房设备搬迁协议 (中英文)
  10. 从Centos7升级到Centos8的教程(图文详解)