gpt4 book ai didi

java - VisualVM - 线程状态

转载 作者:IT老高 更新时间:2023-10-28 13:52:00 25 4
gpt4 key购买 nike

谁能解释一下 SleepingWaitParkMonitor 线程状态之间的区别视觉虚拟机。

enter image description here

这是我发现的:

Running:线程仍在运行。
Sleeping:线程正在 hibernate (在线程对象上调用了方法yield())
Wait:线程被互斥锁或屏障阻塞,正在等待另一个线程释放锁
Park:停放的线程被挂起,直到获得许可。取消驻留线程通常通过调用线程对象上的方法 unpark() 来完成
Monitor:线程正在等待条件变为真以恢复执行

我无法理解的是国家公园,实际上是什么暂停了线程?如何在代码中检测到是什么导致线程暂停执行?

有人可以在这方面指导我吗?

谢谢。

最佳答案

我发现了一个非常好的图表,它几乎描述了您需要/想知道的所有内容。

enter image description here

  1. 新的

如果在调用 start() 方法之前创建 Thread 类的实例,则线程处于新状态。

  1. 可运行

调用start()方法后线程处于可运行状态,但线程调度器并未选择它为运行线程。

  1. 运行

如果线程调度程序选择了线程,则线程处于运行状态。

  1. 定时等待

定时等待是线程等待指定等待时间的线程状态。线程由于调用以下方法之一并具有指定的正等待时间而处于定时等待状态:

  • Thread.sleep( sleep 时间)
  • Object.wait(超时)
  • Thread.join(超时)
  • LockSupport.parkNanos(超时)
  • LockSupport.parkUntil(超时)
  1. 不可运行(被阻止)

这是线程仍处于 Activity 状态,但当前没有资格运行时的状态。

  1. 终止

当线程的 run() 方法退出时,线程处于终止或死亡状态。

希望这能回答你的问题:)。

parking :

Disables the current thread for thread scheduling purposes unless thepermit is available.

如果你喜欢这样调用线程,线程将被停放或挂起,因为它没有执行权限。授予权限后,线程将被取消停放并执行。

LockSupport 的许可与线程相关联(即,许可被授予特定线程)并且不会累积(即每个线程只能有一个许可,当线程消耗许可时,它会消失)。

关于java - VisualVM - 线程状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27406200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com