`
hht_mmtchina
  • 浏览: 12225 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

线程的优先级和生命周期

阅读更多
转载自:http://www.cnblogs.com/mengdd/archive/2013/02/16/2913649.html
线程的生命周期可以分为四个状态:

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操作而受阻塞。

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

  在支持时间片的系统中,该线程的时间片用完。
分享到:
评论

相关推荐

    activity生命周期、线程优先级、异常销毁、任务栈

    在开发过程中,理解并熟练掌握Activity的生命周期、线程优先级、异常销毁以及任务栈原理,可以帮助我们编写出更加稳定、高效且用户体验良好的Android应用。在ActivityLifecycle这个项目中,开发者可以通过参考代码来...

    安卓开发框架工具类相关-activity生命周期线程优先级异常销毁任务栈.zip

    本压缩包“安卓开发框架工具类相关-activity生命周期线程优先级异常销毁任务栈.zip”涉及到四个核心概念:Activity生命周期、线程优先级、异常销毁以及任务栈。下面将对这些知识点进行详细讲解。 首先,Activity...

    Java 实例 - 查看线程优先级源代码+详细指导教程.zip

    这个压缩包“Java 实例 - 查看线程优先级源代码+详细指导教程.zip”包含了一个关于如何查看和理解Java线程优先级的实例源代码和教学材料,对于深入学习Java多线程编程非常有帮助。 在Java中,线程的优先级是由`...

    win32 线程计算矩阵的例题程序

    7. 线程优先级和生命周期管理 这个实例为学习Windows操作系统和多线程编程提供了很好的实践素材,有助于理解和掌握这些核心概念。通过实际编写和调试此类程序,开发者可以提升解决复杂计算问题的能力,同时提升系统...

    线程的基本概念、线程类、任务类、线程优先级、sleep()方法、yield()方法、join方法、interrupt()方法

    线程的基本概念、线程类、任务类、线程优先级、sleep()方法(休眠)、yield()方法(礼让)、join方法(合并)、interrupt()方法(中断),线程的生命周期 线程 与 进程 的关系:**有一个进程中至少包含一个线程 **...

    NachOS线程调度_基于优先级和Round Robin算法

    优先级调度可以分为静态和动态两种类型:静态优先级在创建线程时确定,整个生命周期不变;动态优先级则会根据线程的行为(如等待I/O或执行时间)进行调整。 **Round Robin(轮转)算法**是一种公平的调度策略,尤其...

    (完整版)Java程序设计任务驱动式教程-任务二十八-线程的生命周期与优先级(线程的状态与调度).ppt

    总结来说,理解和掌握Java线程的生命周期和优先级,以及如何通过同步机制解决并发问题,对于编写高效的多线程应用程序至关重要。在实际开发中,我们需要根据具体需求合理安排线程的执行顺序和资源分配,确保程序的...

    Java多线程-线程的生命周期

    Java多线程中,线程的生命周期是编程中必须理解的重要概念。在JDK1.5之前,线程被划分为五个状态,分别是新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)。在JDK1.5及之后,线程的...

    4初学Java多线程:线程的生命周期.pdf

    在探讨Java多线程和线程生命周期时,我们首先应该明确,Java多线程是Java语言支持并发编程的一个重要特性,其允许同时执行多个任务,以提高程序的执行效率和改善用户体验。Java中的每个线程都有自己的生命周期,由一...

    nachos基于优先级的线程调度实验

    `Thread`类的实例化和操作是线程生命周期管理的基础,包括创建、销毁、切换和调度。 `scheduler.cc`和`scheduler.h`则涉及线程调度算法的实现。在基于优先级的调度中,调度器会维护一个线程队列,按照优先级排序。...

    线程的生命周期.pdf

    总之,理解线程的生命周期和如何控制它,对于编写高效、稳定的多线程程序至关重要。在实际编程中,应遵循最佳实践,例如避免使用已弃用的方法,使用线程安全的集合类,以及合理地设计线程间的通信和协作。

    430.428.JAVA基础教程_多线程-线程的生命周期(430).rar

    在实际开发中,我们需要掌握如何控制和管理线程的生命周期,包括线程同步、线程间通信、线程优先级以及中断和守护线程的概念。例如,可以使用`synchronized`关键字来防止数据竞争,用`join()`方法让一个线程等待另一...

    JAVA多线程练习题答案。

    这些题目涵盖了 JAVA 多线程编程的基本概念和技术,包括线程的生命周期、线程同步、线程状态、线程优先级、线程安全等方面。 一、单项选择题 在单项选择题中,我们可以看到各种关于 JAVA 多线程编程的基本概念和...

    Java多线程笔记

    线程状态的转换是通过线程生命周期的各个阶段来实现的。 守护线程 守护线程主要用作程序中后台调度以及支持性工作。当一个 Java 虚拟机中不 存 在 非 Daemon 线 程 的 时 候,Java 虚拟机将退 出。通过 setDaemon...

    Java 线程的生命周期详细介绍及实例代码

    线程在它的整个生命周期中会经历五个基本状态:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)。接下来,我们将详细探讨这些状态以及如何在实际编程中应用它们。 1. **新建状态 ...

    Java 线程的生命周期完整实例分析

    通过这五个线程,我们可以看到 Java 线程的生命周期是如何变化的,以及如何使用锁、wait() 和 notify() 方法来控制线程的生命周期。同时,我们也可以看到线程的状态如何变化,以及如何使用 Thread 的状态来判断线程...

    Java 多线程的创建及方法、优先级.docx

    3. **线程优先级**: Java 线程有三个优先级:`Thread.MIN_PRIORITY`(1),`Thread.NORM_PRIORITY`(5,默认),和 `Thread.MAX_PRIORITY`(10)。优先级高的线程可能会优先获得执行机会,但并不保证顺序,具体...

    windows 多线程处理

    6. **线程优先级和调度**:线程优先级决定了系统如何分配CPU时间给各个线程。Windows提供了多种优先级级别,高优先级线程可能获得更多的执行时间,但过度使用可能导致优先级反转和星形堵塞问题。线程调度由操作系统...

    Java线程的生命周期和状态控制[定义].pdf

    Java线程的生命周期和状态控制是Java多线程编程中的核心概念。线程的状态转换是理解线程行为的关键,这包括新建状态、就绪状态、运行状态、阻塞状态和死亡状态。 1. 新建状态:当使用`new`关键字创建了一个`Thread`...

    易语言多线程防崩溃防卡死.rar

    8. **线程生命周期管理**:创建线程后,还需要正确地管理线程的生命周期,包括启动、等待、结束和清理。示例源码可能展示了如何在适当的时候结束线程并释放其占用的资源。 通过学习和理解这个易语言多线程防崩溃防...

Global site tag (gtag.js) - Google Analytics