Java线程状态转换(最详细的状态转换流程图)

Java线程的状态和状态转换

  • new,
  • runnable,
  • timed waiting,
  • waiting,
  • blocked,
  • terminated.

Java线程状态转换(最详细的状态转换流程图)_第1张图片

New 代表创建但是未启动的线程

runnable又可分为ready和running两个子状态,由于单个cpu同一时间只可以执行单个线程,多线程的分配是通过cpu时间片来分配的,因此有一部分线程会在等待队列,也就是ready状态。CPU的Thread scheduling(线程调度)决定着线程什么时候可以实际运行

处于runnable状态的线程在JVM层面上来看是执行中的状态。但是在操作系统层面上,或许线程在等待一些资源

Timed waiting是线程指定了特定的时间,调用一下方法的现场会进入此状态

  • Thread.sleep(sleeptime)
  • Object.wait(timeout)
  • Thread.join(timeout)
  • LockSupport.parkNanos(timeout)
  • LockSupport.parkUntil(timeout)

waiting 状态是由于线程调用了以下方法

  • Object.wait()
  • Thread.join()
  • LockSupport.park()

blocked 是当前线程无法获取synchronized 锁或者是当前锁对象调用了Object.wait()方法,这时候会进入阻塞状态

线程执行完run()方法则会进入 terminated 状态.

你可能感兴趣的:(java,多线程)