java - 线程如何从运行状态转变为可运行状态?

标签 java multithreading threadpool

我想知道线程如何以及何时在可运行和运行状态之间来回移动。幕后实际发生了什么。我想这在 ThreadPool 的情况下是需要的,但我无法完全理解。请帮助我理解这一点。

最佳答案

if thread is in running state that means its executing run() method and when its in runnable method its executing start() method....so I guess moving from running to runnable means its going back from run() to start()

在大多数操作系统的术语中,“运行”意味着线程实际上正在某个 CPU 上执行指令,而“可运行”意味着除了可用的 CPU 运行之外,没有什么能阻止线程“运行”。

Java 程序无法区分这两种状态。 Java 知道的线程状态有 NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING 和 TERMINATED。

一个线程在 t.start() 被调用之前是 NEW 的,并且之后它永远不能回到 NEW 状态。 WAITING 和 TIMED_WAITING 都表示该线程正在等待某个其他线程中的 notify() 调用。 BLOCKED 表示它正在等待其他任何事情(例如,进入 synchronized block ),而 TERMINATED 表示它已完成。

关于java - 线程如何从运行状态转变为可运行状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34891751/

相关文章:

java - 找到第 n 个质数

java - 不同对象锁上的多线程

C++20 线程可能永远等待 std::atomic

.net - VB.NET:线程函数调用比直接调用函数慢?

c# - 线程池、执行顺序和长时间运行的操作

java - 卡在我的 Java 作业上——使用 StringBuilder 的 Hangman 游戏——有帮助吗?

java - 在 alpine/Jprofile 10 中运行 jpenable 时出现 UnsatisfiedLinkError

使用 boost::asio::thread_pool 的 C++ 线程池,为什么我不能重用我的线程?

c# - 大批量处理的多线程问题

java - 链表删除错误