1

まず、巨大なアプリケーションであり、問​​題は多くの行に関係しているため、コードを実際に添付することはできません。

一部のコレクションへの要素のクリアと再追加を主な変更内容とした後、アプリケーションのスイング GUI がフリーズします。そのフリーズは、追加されたコードが実行されている間は発生しませんが、その後しばらくしてから発生します。奇妙なのは、スレッドが中断されていないことです。

私の質問は、無限ループがこの問題の唯一の説明であるかどうかです。追加されたコードは問題なく終了するため、これが事実である可能性は低いと思います。同期されていないコレクションへのアクセスの問題がある可能性がありますが、そのような状況につながるとは思いません。スレッドが中断されていないため、同期の問題によるデッドロックに対処しているようには見えません。

4

4 に答える 4

1

結局、それはデッドロックです。

私のチームリーダーは、(「同期された」状態で)モニターで待機しているスレッドは、一時停止としてEclipseに表示されないと言いました。彼はいくつかの2つのスレッドを見つけ、それらを一時停止するように依頼しました。それから私は彼らが占有されたモニターを解放するためにお互いを待っているのを見ました。

デッドロックは、入力したコードのせいではありません。私が行った変更により、他の場所で誤った同期が明らかになっただけです。

私を助けてくれてありがとう、本当に感謝しています。これはstackoverflowに関する私の最初の質問であり、あなたがどれほど速く反応したかに驚きました。

于 2012-12-04T20:26:31.590 に答える
0

すでにご存知かもしれませんが、アプリ内の長時間実行されるプロセスで Swing ワーカーを使用したことがない場合は、これを使用するのに理想的な状況であると言えます。

于 2012-12-04T11:29:20.970 に答える
0

巨大なアプリケーション + コレクションの操作 -> ガベージ コレクターが作動しますか?

SO での関連する読み物: maxpermsize と最大ヒープ サイズを増やすための副作用

および GC チューニングに関する Oracle の記事: http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html

于 2012-12-04T10:32:37.690 に答える
0

これは、イベントが実行される Swing 内のイベント ディスパッチャ スレッドでの待機 (処理が重いため) が原因である可能性があります。理想的には、UI がフリーズしないように、リソースを集中的に使用するタスクを別のスレッドで実行する必要があります。

于 2012-12-04T10:34:46.800 に答える