线程的状态控制

在这里需要明确的是:无论采用继承Thread类还是实现Runnable接口来实现应用程序的多线程能力,都需要在该类中定义用于完成实际功能的run方法,这个run方法称为线程体(Thread Body)。按照线程体在计算机系统内存中的状态不同,可以将线程分为创建、就绪、运行、睡眠、挂起和死亡等类型。这些线程状态类型下线程的特征为:

创建状态:当利用new关键字创建线程对象实例后,它仅仅作为一个对象实例存在,JVM没有为其分配CPU时间片等线程运行资源;

就绪状态:在处于创建状态的线程中调用start方法将线程的状态转换为就绪状态。这时,线程已经得到除CPU时间之外的其它系统资源,只等JVM的线程调度器按照线程的优先级对该线程进行调度,从而使该线程拥有能够获得CPU时间片的机会。

睡眠状态:在线程运行过程中可以调用sleep方法并在方法参数中指定线程的睡眠时间将线程状态转换为睡眠状态。这时,该线程在不释放占用资源的情况下停止运行指定的睡眠时间。时间到达后,线程重新由JVM线程调度器进行调度和管理。

挂起状态:可以通过调用suspend方法将线程的状态转换为挂起状态。这时,线程将释放占用的所有资源,由JVM调度转入临时存储空间,直至应用程序调用resume方法恢复线程运行。

死亡状态:当线程体运行结束或者调用线程对象的stop方法后线程将终止运行,由JVM收回线程占用的资源。

在Java线程类中分别定义了相应的方法,用于在应用程序中对线程状态进行控制和管理。

线程的调度

线程调用的意义在于JVM应对运行的多个线程进行系统级的协调,以避免多个线程争用有限资源而导致应用系统死机或者崩溃。

为了线程对于操作系统和用户的重要性区分开,Java定义了线程的优先级策略。Java将线程的优先级分为10个等级,分别用1-10之间的数字表示。数字越大表明线程的级别越高。相应地,在Thread类中定义了表示线程最低、最高和普通优先级的成员变量MIN_PRIORITY、 MAX_PRIORITY和NORMAL_PRIORITY,代表的优先级等级分别为1、10和5。当一个线程对象被创建时,其默认的线程优先级是5。

为了控制线程的运行策略,Java定义了线程调度器来监控系统中处于就绪状态的所有线程。线程调度器按照线程的优先级决定那个线程投入处理器运行。在多个线程处于就绪状态的条件下,具有高优先级的线程会在低优先级线程之前得到执行。线程调度器同样采用"抢占式"策略来调度线程执行,即当前线程执行过程中有较高优先级的线程进入就绪状态,则高优先级的线程立即被调度执行。具有相同优先级的所有线程采用轮转的方式来共同分配CPU时间片。

在应用程序中设置线程优先级的方法很简单,在创建线程对象之后可以调用线程对象的setPriority方法改变该线程的运行优先级,同样可以调用getPriority方法获取当前线程的优先级。

在Java 中比较特殊的线程是被称为守护(Daemon)线程的低级别线程。这个线程具有最低的优先级,用于为系统中的其它对象和线程提供服务。将一个用户线程设置为守护线程的方式是在线程对象创建之前调用线程对象的setDaemon方法。典型的守护线程例子是JVM中的系统资源自动回收线程,它始终在低级别的状态中运行,用于实时监控和管理系统中的可回收资源。

线程分组管理

Java定义了在多线程运行系统中的线程组(ThreadGroup)对象,用于实现按照特定功能对线程进行集中式分组管理。用户创建的每个线程均属于某线程组,这个线程组可以在线程创建时指定,也可以不指定线程组以使该线程处于默认的线程组之中。但是,一旦线程加入某线程组,该线程就一直存在于该线程组中直至线程死亡,不能在中途改变线程所属的线程组。

当Java的Application应用程序运行时,JVM创建名称为main的线程组。除非单独指定,在该应用程序中创建的线程均属于main线程组。在main线程组中可以创建其它名称的线程组并将其它线程加入到该线程组中,依此类推,构成线程和线程组之间的树型管理和继承关系。

与线程类似,可以针对线程组对象进行线程组的调度、状态管理以及优先级设置等。在对线程组进行管理过程中,加入到某线程组中的所有线程均被看作统一的对象。

小结

本文针对Java平台中线程的性质和应用程序的多线程策略进行了分析和讲解。与其它操作系统环境不同,Java运行环境中的线程类似于多用户、多任务操作系统环境下的进程,但在进程和线程的运行及创建方式等方面,进程与Java线程具有明显区别。 Unix 操作系统环境下,应用程序可以利用fork函数创建子进程,但子进程与该应用程序进程拥有独立的地址空间、系统资源和代码执行单元,并且进程的调度是由操作系统来完成的,使得在应用进程之间进行通信和线程协调相对复杂。而Java应用程序中的多线程则是共享同一应用系统资源的多个并行代码执行体,线程之间的通信和协调方法相对简单。 可以说:Java语言对应用程序多线程能力的支持增强了Java作为网络程序设计语言的优势,为实现分布式应用系统中多客户端的并发访问以及提高服务器的响应效率奠定坚实基础。

java高级流程控制多线程作业设计_Java高级-解析Java中的多线程机制相关推荐

  1. 黑马 程序员——Java基础---流程控制

    黑马程序员--Java基础---流程控制 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 一.概述 Java提供了两种基本的流程控制结构:分支结构 ...

  2. Java架构师成长之道之Java程序流程控制

    Java架构师成长之道之Java程序流程控制 Java架构师成长之道 4.1 程序流程控制概述 之前编写的绝大多数程序都是顺序执行,也就是从main函数开始,由上到下一行一行的执行,也被称为顺序结构. ...

  3. java程序流程控制_java程序流程控制

    顺序结构 分支结构(条件结构) 循环结构 控制循环结构 顺序结构: 如果代码里没有流程控制,程序是至上而下一行一行执行的,一条语句执行完之后继续执行下一条语句,直到程序的最后. if语句: 基本语法: ...

  4. Java基础+流程控制+方法+数组【笔记含代码】

    文章目录 什么是计算机 计算机硬件 计算机软件 DOS命令 计算机语言发展史 第一代语言 第二代语言 第三代语言 Java帝国的诞生 C & C++ 反抗 Java初生 Java发展 Java ...

  5. Java程序流程控制(顺序结构、分支结构、循环结构、if-else、switch-case、for、while、do-while、break、continue、return)

    流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块. 其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:         顺序结构         ...

  6. java程序流程控制

    写到这里,才算正式进入编程语言. 之前的都是基础中的基础,用数学方式发打比方来说,就是学习阿拉伯数字和简单的四则运算,现在开始做应用题了 程序流程控制分为 1.顺序结构 程序从上到下逐行执行,中间没有 ...

  7. java面试题大全答案版文库_java高级面试题带答案

    java高级面试题,java面试题大全带答案,线程面试题,java面试宝典2019 1.[请对以下在J2EE中常用的名词进行解释(或简单描述)](http://www.wityx.com/post/1 ...

  8. 第三堂:Java程序流程控制

    在程序设计时,我们常常需要改变程序的控制流程.语句的执行顺序.而我们有三种基本的技术可以改变这个流程:①调用方法,②选择,③循环. 流程控制是所有编程语言的基础部分,Java自然也不例外:Java的流 ...

  9. Java程序流程控制(符号函数sgn、闰年判断)

    选择.循环.跳转 块(block):复合语句:由一对{ }起来的Java语句 block控制着变量的作用域(scope) public static void main(String[] args){ ...

最新文章

  1. 每日一皮:当代互联网企业真实写照!
  2. 【实战】烂泥:net use命令使用(一)
  3. Web 性能测试-内存泄漏测试方法之chrome内存快照
  4. js中console在一行内打印字符串和对象
  5. 对Web设计和开发人员有用的15个Chrome插件
  6. Seata AT模式
  7. python123阶乘累加_使用多线程计算阶乘累加 1!+2!+3!+...+19!+20!。其中一个线程计算阶乘,另一线程实现累加并输出结果。...
  8. 剑指 Offer 32 - II. 从上到下打印二叉树 II
  9. kotlin_Kotlin print(),println(),readLine(),Scanner,REPL
  10. php定时发布微博,使用sae定时任务实现终身自动发表微博(PHP实现)
  11. SAP Open SQL
  12. LCP 3. 机器人大冒险
  13. MAC安装unrar
  14. 表达的方式:评价很让人难受
  15. 电信iptv信号接入服务器,IPTV发展需国家明确电信与广电交叉进入政策
  16. 【集体智慧编程】第二章、提供推荐
  17. SCQA结构化表达--提升沟通效果
  18. Windows10安装开源Mujoco
  19. 记录配置虚拟环境pytorch2
  20. PPPOE和DCHP获得IP地址的方式

热门文章

  1. 项目记录 Gadget桌面帮助系统
  2. 【问题解决方案】CentOS7替换yum的问题:使用yum makecache出现File contains no section headers
  3. 【报告分享】2022中国女性内衣行业研究报告.pdf(附下载链接)
  4. 【方案分享】2020娜扎X薇娅SKG娜小古直播方案.pdf(附下载链接)
  5. 可优比和aag哪个好_2020年儿童床品牌排行榜,如何购买婴儿床?(可优比/思多嘉儿Stokke/好孩子/葛莱Graco)...
  6. sscanf函数用法详解_「MOS考点详解」一道例题详解GETPIVOTDATA函数的用法
  7. python类和对象的定义_day15_python_类和对象
  8. 建筑与建筑群综合布线系统工程验收规范_如果这9个方面考虑周到 你的综合布线系统工程可以竣工验收了...
  9. java I O类大全_Java I/O —— File类
  10. 工程数学(数值分析)第五讲:数据拟合