7

明らかにデッドロックを引き起こすアプリケーションのバグを修正する必要があります。ただし、デッドロックが実際にどこで発生するかはわかりません。IntelliJ のデバッガーを使用してアプリケーションを一時停止したときに、所有するモニターを含むすべてのスレッドのリストを取得できれば非常に役立ちます。たとえば、Eclipseでそれを行う方法を説明する次の記事に似ています:

http://www.eclipsezone.com/eclipse/forums/t44632.html

4

1 に答える 1

8

アプリケーションをデバッグ モードで実行します。デッドロックが発生するまで待ち、アプリケーションを一時停止します。「スレッド」タブに移動し、任意のスレッドを右クリックします。

スレッド ビューのコンテキスト メニューのスクリーンショット

「スレッドのエクスポート...」をクリックします。取得待ちのスレッドは次のように表示されます。

Thinlet-Timer@2125 daemon, prio=1, in group 'main', status: 'MONITOR'
     waiting for AWT-EventQueue-0@1397 to release lock on <0x84c> (a my.Example)
[..]

モニターを所有し、他のスレッドの実行を妨げているスレッドは、次のように表示されます。

AWT-EventQueue-0@1397, prio=6, in group 'main', status: 'RUNNING'
     blocks Thinlet-Timer@2125
[..]
于 2013-09-24T10:43:17.610 に答える