Java并发编程3——线程状态转换

Java并发编程

`



一、操作系统进程状态转换

在这里插入图片描述

二、Java线程转换

在这里插入图片描述

1. Java线程状态分类

从Java API(Thread.State)层面来描述,Java线程有六种状态:
1、NEW —— 线程刚被创建,但是还没有调用start()方法
2、RUNNABLE —— 当调用了start()方法之后
注意:Java API层面的RUNNABLE状态包含了操纵系统层面的运行状态和阻塞状态
3、BLOCKED、WAITTING、TIMED_WAITTING都是Java API层面对操作系统阻塞状态的细分
4、TERMINATED 当线程代码运行结束

2.线程状态转换详解

假设存在Thread t

  • NEW ——> RUNNABLE
    当调用t.start()方法时,线程t由NEW ——> RUNNABLE

  • RUNNABLE<——> WAITING
    当线程t使用 synchronized(obj) 获得对象锁之后
    1、调用obj.wait(),线程t从RUNNABLE——> WAITING
    2、调用obj.notify() obj.notifyAll() t.interrupt()时
    竞争锁成功,线程t WAITING ——> RUNNABLE
    竞争锁失败,线程t WAITING ——> BLOCKED

  • RUNNABLE<——> WAITING
    1、当当前线程调用t.join(),当前线程从RUNNABLE——> WAITING
    注意:是当前线程在线程t的对象监视器上等待
    2、线程t运行结束或调用了当前线程的interrupt()时,当前线程从 WAITING ——> RUNNABLE

  • RUNNABLE <——> WAITING
    1、当前线程调用LockSupport.park() 会让当前线程从 RUNNABLE ——> WAITING
    2、调用LockSupport.unpark(目标线程)或调用了目标线程的interrupt(), 会让目标线程从WAITING ——> RUNNABLE

  • RUNNABLE <——> TIMED_WAITING
    1、当当前线程调用 t.join(long n)时,当前线程从RUNNABLE ——> TIMED_WAITING
    注意:是当前线程在线程t对象的监视器上等待
    2、当当前线程等待时间超过了n毫秒或线程t运行结束或调用了当前线程的iterrupt(),当前线程从TIMED_WAITING ——> RUNNABLE

  • RUNNABLE <——> TIMED_WAITING
    1、当前线程调用Thread.sleep(long n), 当前线程从RUNNABLE ——> TIMED_WAITING
    2、当前线程等待时间超过了n毫秒,当前线程从 TIMED_WAITING ——>RUNNABLE

  • RUNNABLE <——> TIMED_WAITING
    1、当前线程调用LockSupport.parkNanos(long nanos) 或 LockSupport.parkUntil(long deadLine)时,当前线程从RUNNABLE ——> TIMED_WAITING
    2、调用LockSupport.unpark(目标线程)或调用了目标线程的interrupt()或等待超时,或让目标线程从TIMED_WAITING ——> RUNNABLE

  • RUNNABLE <——> BLOCKED
    1、线程t用synchronized(obj) 获取了对象锁时如果竞争失败,从RUNNABLE ——> BLOCKED
    2、持obj锁线程的同步代码块执行完毕,会唤醒该对象上所有的BLOCKED的线程重新竞争,如果其中线程t竞争成功,从BOCKLED——>RUNNABLE,其他失败的线程仍然BLOCKED

  • RUNNABLE <——> TERMINATED
    当前线程所有代码运行完毕,进入TERMINATED

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值