ひとつのスレッドがJavaの同期関数内で実行していて、別のスレッドが同じメソッドにアクセスしたいとしますが、最初のスレッドが完了するまで待たなければならないとしましょう。 2番目のスレッドは、どのスレッドがそのオブジェクトに対してロックを持っているかを知ることができます。 私は最初のスレッドの詳細を印刷したいかもしれません。おそらく、最初のスレッドが開始された場所から印刷したいと思います。オブジェクトのロックを持つスレッドの詳細を取得する方法
1
A
答えて
2
java.util.concurrent.locks.ReentrantLock
を使用している場合、サブクラスはgetOwner
を呼び出すことができます。
また、JMXを使用することもできます。スレッドを繰り返して、java.lang.management.ThreadInfo
と適切なgetLockedMonitors()
またはgetLockedSynchronizers()
を見つけてください。
0
私はそれができないと信じています。あなたには、いくつかの余分なコーディングで似たような行うことができますしかし:
public void myFunction() {
System.out.println("" + Thread.currentThread() + " entering sync @ myFunction");
synchronized(this) {
System.out.println("" + Thread.currentThread() + " entered sync @ myFunction");
...
System.out.println("" + Thread.currentThread() + " leaving sync @ myFunction");
}
System.out.println("" + Thread.currentThread() + " left sync @ myFunction");
}
2
をそれはトムホーティンが書いたが、dumpAllThreadsでThreadInfoにを取得するときに、モニター情報を明示的に要求しなければならない、ほとんど何、少しトリッキーです。以下のような 何か:
Object lock = ...
ThreadMXBean mx = ManagementFactory.getThreadMXBean();
ThreadInfo[] allInfo = mx.dumpAllThreads(true, false);
for (ThreadInfo threadInfo : allInfo) {
MonitorInfo[] monitors = threadInfo.getLockedMonitors();
for (MonitorInfo monitorInfo : monitors) {
if (monitorInfo.getIdentityHashCode() == System.identityHashCode(lock)) {
StackTraceElement[] stackTrace = threadInfo.getStackTrace();
// use the the Information from threadInfo
}
}
}
1
は、診断目的のためにこれは、またはそれはあなたのアプリケーションの一部として使用したい機能のためです。それが診断のためのものであれば、ここでの他の回答のさまざまな冗長なロギングソリューションが、おそらくあなたを動かすのに十分です。機能の一部としてこれを実行する場合は、キーワードよりも堅牢で柔軟なものを使用するべきです(例えば、@ Tomで述べたReentrantLock
ウィザードなど)。
関連する問題
- 1. CA Rally - ProjectPermissionのような子オブジェクトの詳細を取得する方法プロジェクトの詳細を取得する
- 2. マスター/詳細テーブルの詳細テーブルの最後のレコードを取得する方法
- 3. 設定済みのメールアカウントの詳細を取得する方法
- 4. twitterで現在のユーザーの詳細を取得する方法
- 5. デバイスのGPSの詳細を取得する方法
- 6. socket.ioのミドルウェアでイベントの詳細を取得する方法
- 7. Instagramの画像の詳細を取得する方法
- 8. mongo dbの単一フィールドの詳細を取得する方法
- 9. firebaseデータベースのエントリの詳細を取得する方法は?
- 10. kibanaのログフォームダッシュボードの詳細を取得する方法
- 11. jqueryの1つの部門で特定の詳細を取得する方法
- 12. HTTP応答エラーの詳細を取得する方法
- 13. SSRSレポートサーバーデータベース「TABLE」の詳細を取得する方法は?
- 14. データベースからデータの詳細を取得する方法は?
- 15. タイムゾーンから国の詳細を取得する方法は?
- 16. WSO2カスタムビジネスプロセスハンドラでユーザーの詳細を取得する方法は?
- 17. PayPal APIの詳細を取得する方法
- 18. HttpResponseからBadRequestの詳細を取得する方法
- 19. Jenkinsパイプラインでダウンストリームジョブビルドの詳細を取得する方法
- 20. pidからプロセスの詳細を取得する方法
- 21. IOSのWKWebViewで詳細なCookieを取得する方法
- 22. dailymotion videoの詳細を取得する方法
- 23. PHPでユーザーの詳細を取得する方法
- 24. magentoデータベースの詳細を取得する方法
- 25. civicrmでタグの詳細を取得する方法は?
- 26. WMIでFireWireの詳細を取得する方法は?
- 27. calabash-androidでWebViewの詳細情報を取得する方法
- 28. TFSアクティビティでユーザーの詳細を取得する方法
- 29. 私のアプリにターンバイ詳細をリアルタイムで取得する方法
- 30. クエリエディタでは、ステップの詳細を取得する方法は?