我有一個單一類的同步方法,它是由許多線程同時調用。是否有任何Java API可用於檢查哪個線程當前擁有該鎖?如何找到哪個線程當前擁有在java中的鎖
4
A
回答
2
你也許可以用你的同步方法打印出Thread.currentThread()
。
2
jvm ThreadMXBean可讓您訪問各種線程相關信息,包括哪些線程擁有哪些鎖。
0
如果你只是在調試軟件來找出哪個線程導致了阻塞和哪個線程被阻塞,我建議簡單地獲得線程轉儲的現場情況。我不會將這種邏輯用作正常程序流程的一部分。
http://java.sun.com/developer/technicalArticles/Programming/Stacktrace/
3
確切的答案被erickson
[here]
問題給出:編程方式確定哪些Java 線程持有的鎖?
答:
你只能告訴當前 線程是否擁有正常的鎖 (Thread.holdsLock(對象))。您不能 獲得對具有 鎖而沒有本機代碼的線程的引用。
但是,如果你正在做什麼 與線程併發,你 可能需要熟悉 與java.util.concurrent中 包。 ReentrantLock確實允許您獲得其所有者(但其 受保護的方法,因此您必須 擴展此項)。根據您的 應用程序,很可能是 使用併發包,您會發現 鎖不再需要擁有者。
有非編程方法來 發現鎖的業主,如 信令JVM發出一個線程轉儲 到stderr,是有用的 確定死鎖的原因。
順便說一句,請看看下面的鏈接。它提供了有關線程相關方面的所有信息:我覺得不是很精確,我的問題
相關問題
- 1. 如何查找當前擁有哪些線程java.util.concurrent.Semaphore允許?
- 2. 如何找出哪個線程在互斥鎖上有鎖?
- 3. pthread_cond_broadcast之後哪個線程擁有關聯的互斥鎖?
- 4. 解鎖其他線程擁有的鎖java
- 5. 如何在boost中找到當前正在運行的線程?
- 6. 如何找出哪個JavaScript庫擁有$
- 7. Java- TimerTask-org.hibernate.HibernateException:沒有找到當前線程的會話
- 8. 如何找到哪個線程被卡
- 9. 如何找到哪個pip包擁有一個文件?
- 10. Python如何找到哪個類擁有一個變量
- 11. Java:爲什麼這個線程在它已經擁有鎖的時候等待?
- 12. 以編程方式確定哪個Java線程持有鎖
- 13. 哪個線程會得到鎖?
- 14. org.hibernate.HibernateException:在驗證時沒有找到當前線程的會話
- 15. 斷言當前線程沒有保存一個CRITICAL_SECTION鎖
- 16. 如何在Linux中找到由Java進程創建的前10個或前幾個CPU密集線程?
- 17. 如何在Visual Studio Debugger中找到當前StackFrame的列線?
- 18. 如何擁有的mouseEntered只有當鼠標在Java中
- 19. Java線程鎖
- 20. 如何找到當前線程運行的cpu,Mac和BSD?
- 21. windows api:如何在當前進程中找到活動線程數?
- 22. 在JUnit中爲DAO層找不到當前線程的會話
- 23. 在spring-hibernate項目中找不到當前線程的會話
- 24. Spring和線程:找不到當前線程的會話
- 25. 如何擁有一條前往2個目的地的路線
- 26. 如何鎖定Java線程,以便在Platform.runLater完成之前鎖定其他人
- 27. 如何找到哪個應用程序運行在前景iphone
- 28. 如何找到哪個方法在Eclipse中調用當前選定的方法?
- 29. 如何讓當前線程等待函數在java中返回?
- 30. 如何在java中暫停當前線程20秒?
。嘗試調用同步方法時,其中一個線程被阻塞。所以我打算運行一個可以調用一些java API的計時器任務,它可以幫助我知道哪個線程擁有該鎖。這可能嗎? – ihavprobs 2011-02-23 11:20:04
我不認爲你可以做到這一點。但即使你要實現它,你將如何處理線程?無論如何,你無法阻止它,除非它自己或超時執行。 – adarshr 2011-02-23 11:24:47