java线程的生命周期(线程的生命周期)

导读 你们好,最近小活发现有诸多的小伙伴们对于java线程的生命周期,线程的生命周期这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下

你们好,最近小活发现有诸多的小伙伴们对于java线程的生命周期,线程的生命周期这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。

1、 通过前面两节的学习,我们对螺纹有了基本的了解。了解线程和进程的区别,以及线程和场景的使用。本节研究线程的状态和线程类的主要方法。

2、 1,线程的生命周期和状态

3、 从创建到死亡,一个线程要经历几个状态,比如新的、可运行的、正在运行的、阻塞的、等待的、死亡的等等。

4、 其中,运行、阻塞和等待状态会相互转换。

5、 创建线程后,它不会立即进入就绪状态。它需要等待JVM分配线程运行所需的资源,比如内存资源、运行堆栈、程序计数器等。分配完所有资源后,线程将进入就绪状态。

6、 当进入一个就绪线程时,需要等待JVM的调度来获取CPU的时间。对于单核CPU,当前时间段内只能运行一个线程。对于多核CPU,您可以运行多个线程。线程得到CPU的执行时间后,进入运行状态。

7、 由于各种原因,已经进入运行状态的线程可能无法继续运行。例如,线程本身进入睡眠状态,或者被其他线程阻塞,或者被JVM安排进入等待状态。

8、 此时有几种状态:时间等待(睡眠或等待某个事件)、等待(等待被唤醒)和阻塞。

9、 线程执行后,JVM会清理线程使用的资源,线程会进入消亡状态。

10、 thread从创建到消亡的过渡如下图所示。

11、 线程的上下文切换

12、 如前所述,线程需要依次使用CPU。当正在运行的线程被JVM切换到另一个线程时,需要记录当前运行线程的运行栈、程序计数器等数据以及线程状态。当线程再次被唤醒时,它可以保持当前状态并继续执行。

13、 这个过程称为线程上下文切换。

14、 举个例子,假如线程A正在读取文件内容,读到一半时,JVM需要暂停线程A,转去执行线程B,当再次切换回来执行线程A的时候,需要保持线程A读取文件的状态。

15、 对于线程的上下文切换实际上就是存储和恢复CPU状态的过程,它使得线程执行能够从中断点恢复执行。

16、 Thread类的主要方法

17、 在“用实例说明多线程的使用场景及方法”一节,我们已经掌握如何使用Thread类启动线程,下面重点讲述Thread类提供的主要方法。

18、 public void start ()

19、 用于启动线程,需要注意的是,在某个线程上调用这个方法后,它还需要看JVM是否调度到该线程,只有调度到该线程,它才运行。

20、 public static Thread currentThread ()

21、 用于获取当前运行的线程对象。

22、 public ClassLoader getContext ClassLoader ()

23、 用于返回当前线程的上下文ClassLoader。上下文ClassLoader由线程创建者提供,供运行于该线程中的代码在加载类和资源时使用。

24、 public final boolean isAlive ()

25、 用于判断线程是否还存在。

26、 public Thread.State getState ()

27、 用于获取当前线程的状态。

28、 public final String getName ()

29、 用于获取当前线程的名称。

30、 public final void setName ()

31、 用于设置当前线程名称。

32、 public final void setDaemon (boolean on)

33、 用于将该线程标记为守护线程或用户线程。

34、 public final void setPriority (int newPriority)

35、 用于更改当前线程的优先级,优先级高的抢占资源的概率要高一些,同样的优先级在前面的调度的更快。

36、 public static void sleep (long millis) throws InterruptedException

37、 用于在指定的毫秒内让当前正在执行的线程休眠(暂停执行)。

38、 public void interrupt ()

39、 用于中断当前线程。

40、 Thread类方法使用代码如下:

41、 MyRunner类的代码如下

42、 程序输出结果如下图所示

43、 一个线程从它的创建到消亡的过程,会经历不同的阶段。当创建Thread类或其子类的一个实例时,就意味者该线程处于新建状态,一旦调用了该线程实例的start方法,该线程便进入了运行状态,

44、 在线程的运行过程中,它不一定能始终保持运行的状态,可能会被阻塞进入等待状态、也可能会进入休眠状态,也可能会被再次唤醒进入运行状态,状态切换一直持续,直到线程消亡。

以上就是线程的生命周期这篇文章的一些介绍,希望对大家有所帮助。

标签:

免责声明:本文由用户上传,如有侵权请联系删除!