2011-02-23 18 views

回答

2

你也許可以用你的同步方法打印出Thread.currentThread()

+0

。嘗試調用同步方法時,其中一個線程被阻塞。所以我打算運行一個可以調用一些java API的計時器任務,它可以幫助我知道哪個線程擁有該鎖。這可能嗎? – ihavprobs 2011-02-23 11:20:04

+1

我不認爲你可以做到這一點。但即使你要實現它,你將如何處理線程?無論如何,你無法阻止它,除非它自己或超時執行。 – adarshr 2011-02-23 11:24:47

2

jvm ThreadMXBean可讓您訪問各種線程相關信息,包括哪些線程擁有哪些鎖。

3

確切的答案被erickson[here]

問題給出:編程方式確定哪些Java 線程持有的鎖?


答:

你只能告訴當前 線程是否擁有正常的鎖 (Thread.holdsLock(對象))。您不能 獲得對具有 鎖而沒有本機代碼的線程的引用。

但是,如果你正在做什麼 與線程併發,你 可能需要熟悉 與java.util.concurrent中 包。 ReentrantLock確實允許您獲得其所有者(但其 受保護的方法,因此您必須 擴展此項)。根據您的 應用程序,很可能是 使用併發包,您會發現 鎖不再需要擁有者。

有非編程方法來 發現鎖的業主,如 信令JVM發出一個線程轉儲 到stderr,是有用的 確定死鎖的原因。

順便說一句,請看看下面的鏈接。它提供了有關線程相關方面的所有信息:我覺得不是很精確,我的問題

相關問題