java多线程的6种线程状态以及这6种状态间的转换关系,是怎么转换的,转换时发生了什么[面试必备]

在这里插入图片描述

  • 线条1
    • new 线程 进入NEW ,start之后进入RUNNABLE
  • 线条2
    • 获取了锁的线程执行wait,线程从RUNNABLE–>WAITING
    • 线程被打断 interrupt
      • 成功争夺到锁资源 WAITING–> RUNNABLE
      • 没有争夺到锁资源 WAITING–> RUNNABLE–>BLOCKED
    • 线程被notify之后
      • 成功争夺到锁资源 WAITING–> RUNNABLE
      • 没有争夺到锁资源 WAITING–> RUNNABLE–>BLOCKED
  • 线条3
    • a线程 join另外的b线程 a线程RUNNABLE–>WAITING
    • b线程运行完 a线程WAITING–>RUNNABLE
    • a线程执行interrupt后 a线程WAINTING–>RUNNABLE
  • 线条4
    • 当前线程调用了LockSupport.park()方法会让当前线程从RUNNABLE–>WAITING
    • 调用LockSupport.unpark(目标线程对象)或调用了该线程的interrupt()会让当前线程从WAITING–>RUNNABLE
  • 线条5
    • 获取了锁的线程执行wait(long n),线程从RUNNABLE–>TIMED_WAITING
    • 线程被打断 interrupt
      • 成功争夺到锁资源 TIMED_WAITING–> RUNNABLE
      • 没有争夺到锁资源 TIMED_WAITING–> RUNNABLE–>BLOCKED
    • 线程被notify之后
      • 成功争夺到锁资源 TIMED_WAITING–> RUNNABLE
      • 没有争夺到锁资源 TIMED_WAITING–> RUNNABLE–>BLOCKED
  • 线条6
    • a线程 join(long n)另外的b线程 a线程RUNNABLE–>TIMED_WAITING
    • b线程运行完 a线程TIMED_WAITING–>RUNNABLE
    • a线程执行interrupt后 a线程TIMED_WAITING–>RUNNABLE
  • 线条7
    • 当前线程调用了Thread.sleep(long n)后,当前线程从 RUNNABLE–>TIMED_WAITING
    • 当前线程等待了n毫秒之后,当前线程从TIMED_WAITING–>RUNNABLE
    • 调用了当前线程的interrupt()后,当前线程从TIMED_WAITING–>RUNNABLE
  • 线条8
    • 当前线程调用LockSupport.parkNanos(long n)或 LockSupport.parUntil(long n)后当前线程RUNNABLE–>TIMED_WAITING
    • 调用LockSupport.unpark(目标线程对象)或调用了该线程的interrupt(),或等待时间超时,会让当前线程从TIMED_WAITING–>RUNNABLE
  • 线条9
    • 当前线程竞争锁资源时,竞争失败,线程 RUNNABLE–>BLOCKED
    • 当线程被唤醒后,竞争锁资源,竞争成功,当前线程BLOCKED–>RUNNABLE
  • 线条10
    • 当前进程运行完所有代码,当前进程 RUNNABLE–>TERMINAED
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值