java并发-线程生命周期

前言

线程的生命周期指的是线程从创建出来到最终消亡的整个过程,以及过程中的状态变化。

状态图

以下图用mermaid语法绘制:

start()
竞争synchronized锁
Ojbect.wait()
Ojbect.notify()
thread.join(long)
时间到了
执行结束
new
RUNNABLE
BLOCKED
WAITING
TIMED_WAITING
TERMINATED

状态变化说明

java线程对象的所有状态存放在**Thread类的内部类(State)**中:

  1. 初始(NEW)
    1. 新创建了一个线程对象,但还没有调用start()方法
  2. 运行(RUNNABLE)
    1. Java线程中将就绪(READY) 和运行中(RUNNING) 两种状笼统的称为“可运行"
    2. 就绪(READY)
      1. 线程对象创建后,其他线程(比如main线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中并分配cpu使用权
    3. 运行中 (RUNNING)
      1. 就绪(READY)的线程获得了cpu 时间片,开始执行程序代码
  3. 阻塞(BLOCKED)
    1. 表示线程被锁阻塞时的状态。例如:多个线程竞争synchronized锁,有1个线程得到了锁,其他线程就是阻塞状态
  4. 等待(WAITING)
    1. 线程暂停运行,等待其他线程唤醒之后再继续执行。
    2. 进入方法,例如:thread.join(),Ojbect.wait(),LockSupport.park()方法
    3. 唤醒方法,例如:Object.notify()或者Object.notifyAll()
  5. 定时等待(TIMED_WAITING)
    1. 该状态不同于WAITING,它可以在指定的时间后自行恢复
    2. 进入方法,例如:Thread.sleep(long),Object.wait(long),thread.join(long),LockSupport.parkNanos,LockSupport.parkUntil
  6. 终止(TERMINATED)
    1. 表示该线程已经执行结束或者异常中断;
    2. 线程一旦终止,就不能再重启启动,否则报错(IllegalThreadStateException)

补充说明

在Thread类中过时的方法(因为存在线程安全问题,所以弃用了

  • void suspend():暂停当前线程
  • void resume():恢复当前线程
  • void stop():结束当前线程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值