【920、线程的几种状态是什么?几个不同的状态是怎么切换的?】

46 阅读2分钟

Java中线程的状态主要包括以下几种:

  1. 新建(New):线程对象刚刚被创建,但尚未开始执行。可以使用 new Thread() 或者继承 Thread 类来创建线程对象。
  2. 运行(Runnable):线程正在执行其任务或者等待CPU分配时间片来执行。在这个状态下,线程可以是正在运行,也可以是等待运行,具体取决于操作系统的调度。
  3. 阻塞(Blocked):线程被阻塞,等待某些条件满足后再继续执行。这些条件可能包括等待输入/输出、获取锁、或者等待其他线程的通知。
  4. 无限期等待(Waiting):线程无限期地等待某个条件的满足,直到其他线程显式地唤醒它。可以通过调用 Object.wait() 或者 Thread.join() 来使线程进入这个状态。
  5. 有限期等待(Timed Waiting):线程在等待一定时间内等待某个条件的满足,如果超过指定时间仍未满足,则线程会自动唤醒。可以通过调用 Thread.sleep()Object.wait(long timeout) 或者 Thread.join(long millis) 来使线程进入这个状态。
  6. 终止(Terminated):线程已经执行完毕或者因异常退出,进入终止状态。

线程状态之间的切换主要取决于以下几种情况:

  1. 新建 -> 运行:调用线程的 start() 方法,启动线程并使其进入运行状态。
  2. 运行 -> 阻塞:线程在执行过程中遇到了需要等待的条件,如等待输入/输出、获取锁等,此时线程会进入阻塞状态。
  3. 运行 -> 无限期等待:线程调用 Object.wait() 方法或者 Thread.join() 方法,进入无限期等待状态。
  4. 运行 -> 有限期等待:线程调用 Thread.sleep()Object.wait(long timeout) 或者 Thread.join(long millis) 方法,进入有限期等待状态。
  5. 阻塞 -> 运行:等待的条件被满足,线程会从阻塞状态切换回运行状态。
  6. 无限期等待 -> 运行:其他线程调用了等待线程的 notify()notifyAll() 方法,或者等待的条件被满足,使线程从无限期等待状态切换回运行状态。
  7. 有限期等待 -> 运行:等待的时间到达或条件被满足,使线程从有限期等待状态切换回运行状态。
  8. 运行 -> 终止:线程执行完毕或者因异常退出,进入终止状态。