Java中线程生命周期详解

本文详细介绍了线程的六种状态:New、Runnable(包括Ready和Running)、Blocked、Waiting、TimeWaiting以及Terminated,并阐述了状态之间的转换。同时,讲解了Thread.yield()、Thread.sleep()、interrupt()和join()等线程控制方法的工作原理和使用场景,帮助理解Java线程的管理和协作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为IO和多核CPU的出现,为了提高CPU的利用率,引入了多线程。本文就说一下线程的生命周期!

线程有以下几种状态:
1、New
新创建的一个线程,还未调用start()

2、Runnable
以下两种状态
1、当线程准备就绪就等待CPU了 ready
2、当前线程正在运行 Running
这两种状态统称为Runnable

3、Blocked
当线程获取synchronized锁失败的时候,这种状态就是Blocked。这种时候是等待JVM来唤醒的。

4、Waiting
当线程调用t.wait()或者t.join()或者Lock.park()的时候,就会进入Waiting状态。
和Blocked状态不同的是,waiting状态是等待其他对象来唤醒的,而不是JVM。

5、Time Waiting
和Waiting不同的是,Time Waiting调用传入的有最大等待时间。当超过最大等待时间仍未被唤醒的话,线程会自动苏醒。

并且多了一个Thread.sleep(time)也会当前线程进入Time Waiting

6、Terminated
当线程运行完毕后,就会进入Terminated状态,代表着线程进入了结束时刻,即将死亡。

状态转换图

在这里插入图片描述

线程重点方法介绍

1、Thread.yield()
静态方法,当前线程放弃CPU运行时间,从Running进入Ready状态,让操作系统重新进行线程调度。

2、Thread.sleep()
静态方法,当前线程放弃CPU运行时间,从Running进入Time Waiting状态,但是不会放弃其拥有的锁。

3、interrupt()
非静态方法,当调用线程t.interrupt()方法后,本意就是当前线程想要中断线程t的运行,但是是否要结束运行,就有线程t自己处理。

当调用t.interrupt()后,线程t有2种方法来感应,
1、线程对应的t.isInterrupted()为true
2、如果线程t的运行代码被try catch包围的话,会被catch到。

interrupt()会将线程的中断标志设置为true
isinterrupted()会返回线程的中断标记,不会清除中断标记。
Thread.interrupted()返回当前线程的中断标记,会清除中断标记。

4、join()
非静态方法,当前线程如果调用了t.join(),当前线程即使代码运行完成也不会退出,会进入Waiting状态。当线程t运行完毕后,会唤醒当前线程。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值