gpt4 book ai didi

java - 如何查找当前持有 java.util.concurrent.Semaphore 许可的线程?

转载 作者:行者123 更新时间:2023-12-02 08:56:08 25 4
gpt4 key购买 nike

我正在尝试分析线程转储,该转储似乎表明有许多线程正在等待 java.util.concurrent.Semaphore允许,即线程正在等待 Semaphore.acquire()。

我之所以能够暗示这一点,是因为线程处于等待( parking )状态,并且根据我的理解,信号量不使用 LOCK 监视器,而是使用 LockSupport.park()相反,等待另一个线程将其取消停放。

现在,有没有一种方法可以从线程转储中暗示当前持有信号量允许的所有线程?

类似于查找处于 BLOCKED 状态的线程,并检查哪个线程持有 LOCK 并导致该线程 BLOCK?

最佳答案

信号量没有所有权概念,也不了解有关线程的任何信息。这使得它们特别轻量(并且在异步编程中非常有用,其中逻辑执行线程和执行它的硬件线程不一定具有 1:1 映射)。

您还可以从以下事实看出这一点:线程可以释放信号量而无需获取它。

您必须查看堆栈跟踪,以了解线程在哪些信号量上等待,并从那里向后工作。

关于java - 如何查找当前持有 java.util.concurrent.Semaphore 许可的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35159122/

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