- 线条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
java多线程的6种线程状态以及这6种状态间的转换关系,是怎么转换的,转换时发生了什么[面试必备]
最新推荐文章于 2024-05-15 09:30:00 发布