java中线程调度遵循的原则_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中线程调度遵循的原则_Java 多线程(三) 线程的生命周期及优先级相关推荐
- java中线程调度遵循的原则_深入理解Java多线程核心知识:跳槽面试必备
多线程相对于其他 Java 知识点来讲,有一定的学习门槛,并且了解起来比较费劲.在平时工作中如若使用不当会出现数据错乱.执行效率低(还不如单线程去运行)或者死锁程序挂掉等等问题,所以掌握了解多线程至关 ...
- Java 多线程(三) 线程的生命周期及优先级
Java 多线程(三) 线程的生命周期及优先级 线程的生命周期 线程的生命周期:一个线程从创建到消亡的过程. 如下图,表示线程生命周期中的各个状态: 线程的生命周期可以分为四个状态: 1.创建状态: ...
- 线程(线程基本概念、java实现多线程、使用多线程、线程的生命周期、线程同步、线程死锁)
(一)线程基本概念 一. 程序, 进程, 线程的概念 程序: 使用某种语言编写一组指令(代码)的集合,静态的 进程: 运行的程序,表示程序一次完整的执行, 当程序运行完成, 进程也就结束了 个人电脑: ...
- 【多线程】线程的生命周期
搞懂生命周期中各个节点的状态转换机制. 通用的线程生命周期 初始状态:指的是线程已经被创建,但是还不允许分配CPU执行.(这里的被创建,仅仅是在编程语言层面被创建,而在操作系统层面,真正的线程还没有创 ...
- java不同进程的相互唤醒_JAVA多线程之线程间的通信方式
一,介绍 本总结我对于JAVA多线程中线程之间的通信方式的理解,主要以代码结合文字的方式来讨论线程间的通信,故摘抄了书中的一些示例代码. 二,线程间的通信方式 ①同步 这里讲的同步是指多个线程通过sy ...
- JAVA多线程技术-线程的生命周期
当线程被创建并启动后,它既不是一启动就进入了执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建(New).就绪(Ready).运行(Running).阻塞(Blocked).和死亡(D ...
- java for(o t :object) 获取顺序号_java中线程的生命周期
线程是java中绕不过去的一个话题, 今天本文将会详细讲解java中线程的生命周期,希望可以给大家一些启发. java中Thread的状态 java中Thread有6种状态,分别是: NEW – 新创 ...
- java main是多线程的吗_Java多线程之线程及其常用方法
创建线程和常用方法 进程与线程的概念进程 进程是程序执行时的一个实例.程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它分配CPU时间,程序开 ...
- java中线程的生命周期_Java中的线程生命周期– Java中的线程状态
java中线程的生命周期 Understanding Thread Life Cycle in Java and Thread States are very important when you a ...
最新文章
- powerbi visualization
- Super-palindrome(思维)
- C++vector容器-容量和大小
- 2.MySQL中的索引
- Excel中的变量 「 Ctrl + F3 」 查看
- 使用Node.JS,如何将JSON文件读入(服务器)内存?
- Hough(霍夫变换) 基于Opencv2.4.9 和VS2012平台下编写
- 从 ASCII 到 UTF-8 : 大话编码
- IE9父容器overflow:auto时,子容器状态更改导致滚动条下出现额外空间的问题探讨...
- 500状态码_教你玩转HTTP—状态码
- 山东大学操作系统课设
- lnmp一键安装的步骤
- 机器人工程师技术资料
- HTML技术(基础/列表/表格/表单)
- 粤语学习笔记(二)万门大学第6课完
- 使用pgAdmin把Excel文件导入PostgreSql数据库
- 警告:Named Route ‘Main‘ has a default child route. When navigating to this named route
- iNFTnews|一键生成数字藏品,VERTU Web3手机是未来吗?
- 11步,教你创建深度学习聊天机器人
- 线程安全——strtok VS strtok_r
热门文章
- 【kafka】kafka Group coordinator lookup for group
- 【Mac】mac 安装 Redis可视化工具-Redis Desktop Manager
- 95-136-043-源码-Operator-LegacyKeyedCoProcessOperator
- datx 开启debug
- 02-windows下elasticsearch安装elasticsearch-head
- 让美团、京东、搜狐都说好的数据仓库,牛在哪?
- C# WinFrom 用Execl做模版进行数据导入简介
- android 没有 layout_above,在RelativeLayout布局中layout_above不起作用
- 它在计算机房的旁边英文,计算机房设备搬迁协议 (中英文)
- 从Centos7升级到Centos8的教程(图文详解)