java线程的六大状态分别是什么

严格来说,Java线路的六个主要状态是从“刚刚离开小区”(NEW)到“等待红灯”(BLOCKED);这就像“看着电话交叉口”(可运行)和最后“回家睡觉”(结局)中的人行横道。
这个问题因状态转换出现的条件而变得复杂。

我们先来说说最重要的几点。
在我们去年参与的一个备受瞩目的项目中,RUNNABLE 状态占用了超过 7 0% 的 CPU 时间。
然而,我们直接调用start(),发现线程池溢出了CPU。
后来我们了解到,这是由于从 3 ,000 根电缆开始控制不好造成的。
使用 Executors.newFixedThreadPool() 会导致内存溢出。
另一点是 wait 和 TIMED_WAITING 状态不能互换使用。
去年试用的时候,我直接使用了Object.wait(),忘记加锁了。
结果,线程永远卡住了——行话里称为雪崩效应。
事实上,前面任何小的延迟都会延迟后面的一切。
还有一个更重要的细节。
例如Thread.sleep(1 000)释放CPU但不释放锁;所以在同一个代码块中调用sleep并不会释放锁资源。
很多人并不关心这个。

我以为WAITING和TIMED_WAITING类似,后来发现不对劲。
例如,可以使用Object.wait(5 000)主动释放锁,但Thread.join(5 000)则不能。
这绝对值得付出努力。
给那些困惑的人一个提醒:当使用 wait/notify 时;必须保证调用它们的方法和同步代码块属于同一个锁;不然会直接崩溃。
说实话,这很复杂。

下次编写代码时,我们建议使用ThreadFactory自定义线程池的名称,以方便跟踪状态转换问题。

线程的六种状态

六种线程状态:NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED。

新:未启动。
例如,在 new Thread() 之后。

RUNNABLE:JVM 执行。
例如,在 start() 之后。

BLOCKED:等待阻塞。
例如,在同步方法块内。

WAITING:等待通知。
例如,wait()。

TIMED_WAITING:等待有限的时间。
例如,等待(1 000)。

终止:已完成。
例如,run()完成。

创建后 NEW -> start() -> RUNNABLE -> run() -> DISCONTINUED。

BLOCKED/WAITING/TIMED_WAITING 被视为阻塞。
等到你醒来或时间到了。

不确定内部 JVM 调度细节。

自己掂量一下。

异步与并发模型分类及语言对照深度解析

上周看到了这份文件。
相当详细。

回调和事件驱动模型。
JavaScript setTimeout(1 9 9 5 ) 记住了。
C 的函数指针回调也可以理解。

承诺/未来模型。
其理论基础是Monad模型(1 9 7 6 )。
JavaScriptES6 (2 01 5 ) 引入了 Promise。
Java8 (2 01 4 ) 支持 CompletableFuture。

异步函数(Async/Await)。
首次在 C5 .0 (2 01 2 ) 中引入。
JavaScriptES2 01 7 (2 01 7 )普及。

消息传递模型(Actor/CSP)。
Actor模型:Erlang的进程模型(1 9 8 6 )。
CSP模型:Go(Goroutine+Channel)。

结构化并发模型。
Kotlin (CoroutineScope) 实践。
优点是可以避免线程泄漏。

执行器和异构计算模型。
C++2 6 的 std::execution。
用于 Python 的 Numba。

JavaScript演化路径:回调→Promise→Async/Await→事件循环优化(Libuv库)。

Python演化路径:回调→生成器→Asyncio→结构化并发。

Go的演化路径:多线程→Goroutine+Channel→泛型支持。

Kotlin 演化路径:线程 → 协程 → Actor 模型 → 结构化并发。

Java演化路径:Thread→ExecutorService→Fork/Join→虚拟线程→结构化并发。

C++演化路径:线程→协程(C++2 0)→std::execution(C++2 6 提案)。

Swift演化路径:GCD→Async/Await→Actor→TaskGroup。

高并发服务。
推荐模型:CSP(Go)、Actor(Erlang)。
优点是轻量级线程。

异步 IO 密集型应用程序。
推荐模型:事件驱动(Node.js)、协程(PythonAsyncio)。

分布式系统。
推荐模型:Actor (Erlang)、结构化并发 (Kotlin)。

高性能计算。
推荐模型:异构计算(C++2 6 )、SIMD优化(JavaVectorAPI)。

移动应用程序开发。
推荐模型:Async/Await+Actor (Swift)、Coroutine (Kotlin)。

未来趋势。
统一并发模型。
语言倾向于集成结构化并发和Actor模型。

异构计算支持。
C++2 6 的 std::execution 促进了混合 CPU/GPU 编程。

工具链优化。
增强的异步代码调试工具。

安全改进。
结构化并发减少了资源泄漏。

我不确定这部分。
没关系。