Discuss / Java / 关于Runnable状态解释的疑惑

关于Runnable状态解释的疑惑

Topic source

java核心技术卷一中指出线程调用start()方法后就处于Runnable状态,但并不一定就在运行。廖老师在博客中将Runnable状态解释为正在执行run方法的运行中的进程是否不妥?

还有一个Running运行状态没有列出,难道现在没这种说法了嘛?

廖雪峰

#3 Created at ... [Delete] [Delete and Lock User]

线程的状态只有这几种,并且被定义在State中:

https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/Thread.State.html

廖雪峰

#4 Created at ... [Delete] [Delete and Lock User]

如果还有其他状态,那就是JDK升级了

我看知乎上有个回答是下面这样说的:

运行态:RUNNABLE

在Java中,运行态包括就绪态 和 运行态。

  • 就绪态

  • 该状态下的线程已经获得执行所需的所有资源,只要CPU分配执行权就能运行。

  • 所有就绪态的线程存放在就绪队列中。

  • 运行态

  • 获得CPU执行权,正在执行的线程。

  • 由于一个CPU同一时刻只能执行一条线程,因此每个CPU每个时刻只有一条运行态的线程。

先就绪再运行,如果按照你说的不一定在运行。

廖雪峰

#6 Created at ... [Delete] [Delete and Lock User]

一个CPU任意时刻当然只能运行一个线程,其他可以运行的线程都在等待操作系统分配CPU

你把这种状态的线程和等待锁的状态区分清楚就可以了,判断一个RUNNABLE状态的线程是不是正在被CPU执行其实没啥意义,因为高级应用程序并不能控制底层。

truth1024

#7 Created at ... [Delete] [Delete and Lock User]
/** * Thread state for a runnable thread.  A thread in the runnable * state is executing in the Java virtual machine but it may * be waiting for other resources from the operating system * such as processor. */RUNNABLE

没啥好纠结的,源码提供的解释就是"Thread state for a runnable thread. A thread in the runnable state is executing in the Java virtual machine but it may be waiting for other resources from the operating system such as processor(可运行线程的线程状态。 处于可运行状态的线程正在 Java 虚拟机中执行,但它可能正在等待来自操作系统的其他资源,例如处理器)".run里面的代码确实是在JVM中执行,但是JVM这个时候可能在等待处理器时间片.毕竟Java代码并不是直接由处理器执行的

🌙

#9 Created at ... [Delete] [Delete and Lock User]

java 核心卷  和 java编程 思想 哪本书好一点?

还是直接把这个教程啃烂了就可以了?

在 Java 中,多线程中的阻塞状态和等待状态是两种不同的状态,它们之间有一些区别:

1. 阻塞状态(Blocked):

   - 当线程在获取锁时被其他线程所占用,导致无法继续执行时,线程会进入阻塞状态。

   - 线程进入阻塞状态是因为正在等待某个条件的发生,一旦条件满足,线程将会被唤醒并切换到就绪状态。

   - 在阻塞状态下的线程仍然持有锁,只是无法继续执行而已。

2. 等待状态(Waiting):

   - 当线程调用 `Object.wait()`、`Thread.join()` 或 `LockSupport.park()` 等方法进入等待状态时,线程会进入等待状态。

   - 等待状态下的线程会释放持有的锁,等待其他线程调用 `notify()`、`notifyAll()` 或被中断时才能被唤醒。

   - 等待状态通常用于线程间的协调和通信,等待特定条件满足后再继续执行。

总的来说,阻塞状态是因为线程被其他原因无法继续执行所产生的状态,而等待状态则是线程主动等待某些条件满足才能继续执行的状态。在编写多线程程序时,理解和正确处理线程的阻塞和等待状态是非常重要的。

手动挡和自动挡


  • 1

Reply