首页 > 家居生活 > 宠物天地 >

理解线程生命周期及Thread类的主要方法

来源:互联网 2023-03-20 14:11:58 277

理解线程生命周期及Thread类的主要方法KOj办公区 - 实用经验教程分享!

方法/步骤

  • 1

    通过前面两节的学习,我们对线程有了基本认识。了解了线程和进程的区别以及线程的使用方法和场景。本节学习线程的状态和Thread类的主要方法。KOj办公区 - 实用经验教程分享!

    1、线程的生命周期及状态KOj办公区 - 实用经验教程分享!

    线程从创建到消亡,要经历创建(new)、就绪(runnable)、运行(running)、阻塞(blocked)、等待(waiting)、消亡(dead)等若干状态,其中运行、阻塞、等待状态之间会互相转换。KOj办公区 - 实用经验教程分享!

    线程创建后,不会立即进入就绪状态,需要等待JVM分配线程运行所必备的资源,如内存资源、运行栈、程序计数器等,所有资源分配完毕后,线程进入就绪状态。KOj办公区 - 实用经验教程分享!

    进入就绪的线程,需要等待JVM的调度以获取CPU的时间,对于单核CPU来说,当前时间段只能运行一个线程,如果是多核CPU,可以运行多个线程。线程得到CPU的执行时间后,就进入了运行状态。KOj办公区 - 实用经验教程分享!

    进入运行状态的线程,可能会由于多种原因导致线程不能继续运行下去。例如,线程自身进入睡眠状态、或者被其它线程阻塞、或者被JVM调度进入等待状态等。此时就对应着多个状态:time waiting(睡眠或等待一定的事件)、waiting(等待被唤醒)、blocked(阻塞)。KOj办公区 - 实用经验教程分享!

    线程执行完毕,JVM会清理线程所使用到的资源,线程进入消亡状态。KOj办公区 - 实用经验教程分享!

    线程从创建到消亡状态之间的转换如下图所示KOj办公区 - 实用经验教程分享!

    理解线程生命周期及Thread类的主要方法KOj办公区 - 实用经验教程分享!

  • 2

    线程的上下文切换KOj办公区 - 实用经验教程分享!

    前面说到线程需要轮换使用CPU的时间,当正在运行的线程被JVM切换到另一个线程时,需要记录当前运行线程的运行栈、程序计数器等数据和线程状态,当线程再次被唤醒时,能够保持当前的状态继续执行。这种过程称为线程的上下文切换。KOj办公区 - 实用经验教程分享!

    举个例子,假如线程A正在读取文件内容,读到一半时,JVM需要暂停线程A,转去执行线程B,当再次切换回来执行线程A的时候,需要保持线程A读取文件的状态。KOj办公区 - 实用经验教程分享!

    对于线程的上下文切换实际上就是存储和恢复CPU状态的过程,它使得线程执行能够从中断点恢复执行。KOj办公区 - 实用经验教程分享!

    Thread类的主要方法KOj办公区 - 实用经验教程分享!

    在“用实例说明多线程的使用场景及方法”一节,我们已经掌握如何使用Thread类启动线程,下面重点讲述Thread类提供的主要方法。KOj办公区 - 实用经验教程分享!

    ● public void start ()KOj办公区 - 实用经验教程分享!

    用于启动线程,需要注意的是,在某个线程上调用这个方法后,它还需要看JVM是否调度到该线程,只有调度到该线程,它才运行。KOj办公区 - 实用经验教程分享!

    ● public static Thread currentThread ()KOj办公区 - 实用经验教程分享!

    用于获取当前运行的线程对象。KOj办公区 - 实用经验教程分享!

    ● public ClassLoader getContext ClassLoader ()KOj办公区 - 实用经验教程分享!

    用于返回当前线程的上下文ClassLoader。上下文ClassLoader由线程创建者提供,供运行于该线程中的代码在加载类和资源时使用。KOj办公区 - 实用经验教程分享!

    ● public final boolean isAlive ()KOj办公区 - 实用经验教程分享!

    用于判断线程是否还存在。KOj办公区 - 实用经验教程分享!

    ● public Thread.State getState ()KOj办公区 - 实用经验教程分享!

    用于获取当前线程的状态。KOj办公区 - 实用经验教程分享!

    ● public final String getName ()KOj办公区 - 实用经验教程分享!

    用于获取当前线程的名称。KOj办公区 - 实用经验教程分享!

    ● public final void setName ()KOj办公区 - 实用经验教程分享!

    用于设置当前线程名称。KOj办公区 - 实用经验教程分享!

    ● public final void setDaemon (boolean on)KOj办公区 - 实用经验教程分享!

    用于将该线程标记为守护线程或用户线程。KOj办公区 - 实用经验教程分享!

    ● public final void setPriority (int newPriority)KOj办公区 - 实用经验教程分享!

    用于更改当前线程的优先级,优先级高的抢占资源的概率要高一些,同样的优先级在前面的调度的更快。KOj办公区 - 实用经验教程分享!

    ● public static void sleep (long millis) throws InterruptedExceptionKOj办公区 - 实用经验教程分享!

    用于在指定的毫秒内让当前正在执行的线程休眠(暂停执行)。KOj办公区 - 实用经验教程分享!

    ● public void interrupt ()KOj办公区 - 实用经验教程分享!

    用于中断当前线程。KOj办公区 - 实用经验教程分享!

    Thread类方法使用代码如下:KOj办公区 - 实用经验教程分享!

    理解线程生命周期及Thread类的主要方法KOj办公区 - 实用经验教程分享!

  • 3

    MyRunner类的代码如下KOj办公区 - 实用经验教程分享!

    理解线程生命周期及Thread类的主要方法KOj办公区 - 实用经验教程分享!

  • 4

    程序输出结果如下图所示KOj办公区 - 实用经验教程分享!

    一个线程从它的创建到消亡的过程,会经历不同的阶段。当创建Thread类或其子类的一个实例时,就意味者该线程处于新建状态,一旦调用了该线程实例的start方法,该线程便进入了运行状态,在线程的运行过程中,它不一定能始终保持运行的状态,可能会被阻塞进入等待状态、也可能会进入休眠状态,也可能会被再次唤醒进入运行状态,状态切换一直持续,直到线程消亡。KOj办公区 - 实用经验教程分享!

    理解线程生命周期及Thread类的主要方法KOj办公区 - 实用经验教程分享!

  • 4相关内容未经授权抓取自百度经验
  • 以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!KOj办公区 - 实用经验教程分享!


    标签: 宠物

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号统计代码