Java 线程的几种状态

目录

线程状态及其含义

状态之间的切换条件


线程状态及其含义

Java线程主要有以下几种状态:

  1. 新建(New):线程对象已被创建,但还没有调用start()方法。
  2. 可运行(Runnable):线程对象调用了start()方法,此时线程就绪并等待CPU时间片以便执行。
  3. 阻塞(Blocked):线程因为某种原因放弃CPU使用权,暂时停止运行。在Java中,阻塞状态通常发生在线程尝试获取一个锁(synchronized block/方法),而该锁正被其他线程持有时。
  4. 等待(Waiting):线程因为调用wait()join()LockSupport.park()方法而进入等待状态,需要其他线程调用notify()notifyAll()LockSupport.unpark(Thread)来唤醒。
  5. 超时等待(Timed Waiting):线程因为调用了带有超时参数的sleep(long millis)wait(long timeout)join(long millis)Lock.tryLock(long timeout)等方法而进入超时等待状态。
  6. 终止(Terminated):线程因为执行结束或因为某种原因提前终止(如interrupt())而结束执行。

状态之间的切换条件

  • 新建(New) -> 可运行(Runnable):当线程对象调用了start()方法时,线程从新建状态变为可运行状态。
  • 可运行(Runnable) -> 阻塞(Blocked):当线程试图获取一个已被其他线程持有的锁时,它将从可运行状态变为阻塞状态。
  • 可运行 (Runnable)-> 等待(Waiting):当线程调用wait()方法时,它将从可运行状态变为等待状态。
  • 可运行(Runnable) -> 超时等待(Timed Waiting):当线程调用带有超时参数的方法(如sleep(long))时,它将从可运行状态变为超时等待状态。
  • 阻塞 (Blocked)-> 可运行(Runnable):当线程获取到它等待的锁时,它将从阻塞状态变为可运行状态。
  • 等待(Waiting) -> 可运行(Runnable):当线程被notify()notifyAll()唤醒时,它将从等待状态变为可运行状态。
  • 超时等待(Timed Waiting) -> 可运行(Runnable):当线程等待超时,或者被notify()notifyAll()唤醒时,它将从超时等待状态变为可运行状态。
  • 可运行/阻塞/等待/超时等待 -> 终止(Terminated):当线程执行完毕或因为异常退出时,它将变为终止状态。

完结~~

你可能感兴趣的:(java进阶,java,线程状态,多线程,线程状态切换)