0

クラスjava.lang.ThreadInfoは、Javaでの同期に関する統計を提供するいくつかの非常に便利なメソッドを提供します。例えば:

getBlockedTime() スレッド競合の監視が有効になっているため、このThreadInfoに関連付けられたスレッドがモニターへの入力またはモニターへの再入力をブロックしたおおよその累積経過時間(ミリ秒単位)を返します。[...]

getWaitedCount() このThreadInfoに関連付けられたスレッドが通知を待機した合計回数を返します。[...]

JVMTIAPIからこれらの情報にアクセスするための関数が見つかりません。私はそれを見落としていますか、それともこれらの情報を自分で収集する必要がありますか?


同期統計以外に、スレッドIDを取得することさえできないようです。これは、を使用して取得できます。Thread.currentThread().getId();

4

1 に答える 1

1

それほど単純ではありませんが、JVMTIイベントを介してブロックされた時間に到達して待機カウントを行うことができると思います(「monitors」に関するイベントを参照してください:「MonitorContendedEnter」および「MonitorWait」など)。

スレッドIDについては、JVMTIがこれらを割り当てているようには見えません。一方、ThreadInfoで指定されたIDが、O/Sによって割り当てられた「実際の」IDを実際に参照しているかどうかはわかりません。

于 2011-04-17T01:23:51.543 に答える