首页 技术 正文
技术 2022年11月6日
0 收藏 668 点赞 441 浏览 45367 个字

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

一、前言

  当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)5种状态。尤其是当线程启动以后,它不可能一直”霸占”着CPU独自运行,所以CPU需要在多条线程之间切换,于是线程状态也会多次在运行、阻塞之间切换

  • 新建状态,当程序使用new关键字创建了一个线程之后,该线程就处于新建状态,此时仅由JVM为其分配内存,并初始化其成员变量的值

  • 就绪状态,当线程对象调用了start()方法之后,该线程处于就绪状态。Java虚拟机会为其创建方法调用栈和程序计数器,等待调度运行

  • 运行状态,如果处于就绪状态的线程获得了CPU,开始执行run()方法的线程执行体,则该线程处于运行状态

  • 阻塞状态,当处于运行状态的线程失去所占用资源之后,便进入阻塞状态

  • 死亡状态,线程在run()方法执行结束后进入死亡状态。此外,如果线程执行了interrupt()或stop()方法,那么它也会以异常退出的方式进入死亡状态。

二、新建和就绪状态

  当程序使用new关键字创建了一个线程之后,该线程就处于新建状态,此时它和其他的Java对象一样,仅仅由Java虚拟机为其分配内存,并初始化其成员变量的值。此时的线程对象没有表现出任何线程的动态特征,程序也不会执行线程的线程执行体。

  当线程对象调用了start()方法之后,该线程处于就绪状态。Java虚拟机会为其创建方法调用栈和程序计数器,处于这个状态中的线程并没有开始运行,只是表示该线程可以运行了。至于该线程何时开始运行,取决于JVM里线程调度器的调度。

  注意:启动线程使用start()方法,而不是run()方法。永远不要调用线程对象的run()方法。调用start0方法来启动线程,系统会把该run()方法当成线程执行体来处理;但如果直按调用线程对象的run()方法,则run()方法立即就会被执行,而且在run()方法返回之前其他线程无法并发执行。也就是说,系统把线程对象当成一个普通对象,而run()方法也是一个普通方法,而不是线程执行体。需要指出的是,调用了线程的run()方法之后,该线程已经不再处于新建状态,不要再次调用线程对象的start()方法。只能对处于新建状态的线程调用start()方法,否则将引发IllegaIThreadStateExccption异常。

  调用线程对象的start()方法之后,该线程立即进入就绪状态——就绪状态相当于”等待执行”,但该线程并未真正进入运行状态。如果希望调用子线程的start()方法后子线程立即开始执行,程序可以使用Thread.sleep(1) 来让当前运行的线程(主线程)睡眠1毫秒,1毫秒就够了,因为在这1毫秒内CPU不会空闲,它会去执行另一个处于就绪状态的线程,这样就可以让子线程立即开始执行。

三、运行和阻塞状态

3.1 线程调度

  如果处于就绪状态的线程获得了CPU,开始执行run()方法的线程执行体,则该线程处于运行状态,如果计算机只有一个CPU。那么在任何时刻只有一个线程处于运行状态,当然在一个多处理器的机器上,将会有多个线程并行执行;当线程数大于处理器数时,依然会存在多个线程在同一个CPU上轮换的现象。

  当一个线程开始运行后,它不可能一直处于运行状态(除非它的线程执行体足够短,瞬间就执行结束了)。线程在运行过程中需要被中断,目的是使其他线程获得执行的机会,线程调度的细节取决于底层平台所采用的策略。对于采用抢占式策略的系统而言,系统会给每个可执行的线程一个小时间段来处理任务;当该时间段用完后,系统就会剥夺该线程所占用的资源,让其他线程获得执行的机会。在选择下一个线程时,系统会考虑线程的优先级。

  所有现代的桌面和服务器操作系统都采用抢占式调度策略,但一些小型设备如手机则可能采用协作式调度策略,在这样的系统中,只有当一个线程调用了它的sleep()或yield()方法后才会放弃所占用的资源——也就是必须由该线程主动放弃所占用的资源。

3.2 线程阻塞

  当发生如下情况时,线程将会进入阻塞状态

  ① 线程调用sleep()方法主动放弃所占用的处理器资源

  ② 线程调用了一个阻塞式IO方法,在该方法返回之前,该线程被阻塞

  ③ 线程试图获得一个同步监视器,但该同步监视器正被其他线程所持有。关于同步监视器的知识、后面将有深入的介绍

  ④ 线程在等待某个通知(notify)

  ⑤ 程序调用了线程的suspend()方法将该线程挂起。但这个方法容易导致死锁,所以应该尽量避免使用该方法

  当前正在执行的线程被阻塞之后,其他线程就可以获得执行的机会。被阻塞的线程会在合适的时候重新进入就绪状态,注意是就绪状态而不是运行状态。也就是说,被阻塞线程的阻塞解除后,必须重新等待线程调度器再次调度它。

2.3 解除阻塞

  针对上面几种情况,当发生如下特定的情况时可以解除上面的阻塞,让该线程重新进入就绪状态:

  ① 调用sleep()方法的线程经过了指定时间。

  ② 线程调用的阻塞式IO方法已经返回。

  ③ 线程成功地获得了试图取得的同步监视器。

  ④ 线程正在等待某个通知时,其他线程发出了个通知。

  ⑤ 处于挂起状态的线程被调甩了resdme()恢复方法。

  图 3.1 线程状态转换图

<img src="data:image/png;base64,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6z+5aTzUbmIRykBNIBCPSjCIlEGEVG0YsFOSlDEhN3FG2kgrIY3iRHKk6cXDvrx635k55+zZPbPn7PfDYnbPmTMz52i9+zvPPvO8n3d+x1OlBhbm3Llzjz766B/+8wOjp9tRPj7wV/eeOnVKfidubW1RZoLxwgsvHD16dOxkO4719fWNjY16m1lM1I3Ubds+99xz7330y3f86/8GL/3fwfl49z9k6+vr8rctWj72ie9973sbG/f87Gd31nVwcD7Onn3n8ePHZeCM/Bp77bXXPv3pT9upeux/GeAAeeONNz71qU/d9fTh4KUHDs7HH/zLA/c8fK8MopbhV7R8wPHss88+/PDDf3vAfPKTn9zY2DBx0f7TTUekbtv229/+9j0PP3rn8/8dvPSzg/Bx92f/8cSJE6Y+zYIa+8frr79+/PjxM2fu+tWvgoPw8Z3vvHt9fV0WdnF+jb366qsf//jHJVIz8QNYpF//+tef+9zn/vjv7hs96S7m453PHT5+/Pj3v/9984Poxo0bY/8jjE8plWWZfJ4kSRzH457PfpBl2cc+9rHHH3987KC7CE888cTa2tpXv/rVvrjYHanbtv3Rj360trb2J489e8eLrwff/Omqfrzry/++trZmrkes6/rSpUv8bWtfefPNN9fX10+ceP9Pf3rnm28Gq/rxwx++87Ofvcd+a3fx4sXf//739ktx/fr1b33rWx/96EeZSw0s2LVr15566qkPPvShu/7pcPDNB1b1486vH37v+n3SeGZ+EDGIum3bLMuCIKiqSr4siiIIgqIoRj2p8d26desHP/jB2traJz7xiSeeeGLs0LuHHnnkkbW1NVkmoi8u9kbqtm0vXbr0/PPPr62tvecLz9/59f8KvvGTlfm444XX3v33//bBhx5JksT84Kjr+urVq3v87YeduH79+iuvvLK2tvb003f/z/+845e/DFbp4/TpQ1/84vvtmpD8v9r3Z9atra1XX311wf8EAG7evHn27Nn19fUPHLv30JP3B994YJU+3vG1w3+6cZ8TGi5evPj222+P/cJPq2karbVJvbsriqIoiuxbwjCkUC02NzclLh47duyxxx77wgp5/PHHH3nkkQ9/+MMnTpyQ8coDcXEoUrdte/369aqqnnnmmSNHjvyZOvaeLzx/6Mnv3vXUf4yeiXfw8Y6v/eehJ7/7R1986QPHPv/g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" alt="" width="777" height="254" />

  从图3.1中可以看出,线程从阻塞状态只能进入就绪状态,无法直接进入运行状态。而就绪和运行状态之间的转换通常不受程序控制,而是由系统线程调度所决定。当处于就绪状态的线程获得处理器资源时,该线程进入运行状态;当处于运行状态的线程失去处理器资源时,该线程进入就绪状态。但有一个方法例外,调用yield()方法可以让运行状态的线程转入就绪状态。关于yield()方法后面有更详细的介纽。

四、线程死亡

4.1 死亡状态

  线程会以如下3种方式结束,结束后就处于死亡状态:

  ① run()或call()方法执行完成,线程正常结束。

  ② 线程抛出一个未捕获的Exception或Error。

  ③ 直接调用该线程stop()方法来结束该线程——该方法容易导致死锁,通常不推荐使用。

4.2 程序设计

  当主线程结束时,其他线程不受任何影响,并不会随之结束。一旦子线程启动起来后,它就拥有和主线程相同的地位,它不会受主线程的影响。为了测试某个线程是否已经死亡,可以调用线程对象的isAlivc()方法,当线程处于就绪、运行、阻塞了种状态时,该方法将返回true;当线程处于新建、死亡状态时,该方法将返回false。

  切记,不要试图对一个已经死亡的线程调用start()方法使它重新启动,死亡就是死亡,该线程将不可再次作为线程执行。

下面程序尝试对处于死亡状态的线程再次调用start()。

  1. package test;
  2. public class StartDead extends Thread {
  3.    private int i;
  4.  
  5.    // 重写run方法,run方法的方法体就是线程执行体
  6.    public void run() {
  7.       for (; i < 100; i++) {
  8.          System.out.println(getName() + “” + i);
  9.       }
  10.    }
  11.  
  12.    public static void main(String[] args) {
  13.       // 创建线程对象
  14.       StartDead sd = new StartDead();
  15.       for (int i = 0; i < 300; i++) {
  16.          // 调用Thread的currentThread方法获取当前线程
  17.          System.out.println(Thread.currentThread().getName() + “” + i);
  18.          if (i == 20) {
  19.             // 启动线程
  20.             sd.start();
  21.             // 判断启动后线程的isAlive()值,输出true
  22.             System.out.println(sd.isAlive());
  23.          }
  24.          // 只有当线程处于新建、死亡两种状态时isAlive()方法返回false。
  25.          // 当i > 20,则该线程肯定已经启动过了,如果sd.isAlive()为假时,
  26.          // 那只能是死亡状态了。
  27.          if (i > 20 && !sd.isAlive())
  28.  
  29.          {
  30.             // 试图再次启动该线程
  31.             sd.start();
  32.          }
  33.       }
  34.    }
  35. }

4.3 运行结果

main 0

main 1

main 2

main 3

main 4

main 5

main 6

main 7

main 8

main 9

main 10

main 11

main 12

main 13

main 14

main 15

main 16

main 17

main 18

main 19

main 20

true

main 21

…………

Thread-0 0

Thread-0 1

Thread-0 2

Thread-0 3

Thread-0 4

Thread-0 5

Thread-0 6

Thread-0 7

Thread-0 8

………………

Thread-0 92

Thread-0 93

Thread-0 94

Thread-0 95

Thread-0 96

Thread-0 97

Thread-0 98

Thread-0 99

main 25

Exception

main→主线程

Thread-0→线程1

Exception→异常

  上面程序中的粗体字代码试图在线程已死亡的情况下再次调用start()方法来启动该线程。运行上面程序,将引发IllegaIThreadStateException异常,这表明处于死亡状态的线程无法再次运行了。

  转自:https://www.cnblogs.com/sunddenly/p/4106562.html

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,082
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,557
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,406
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,179
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,815
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,898