Java例外致命的
DeadlockDeadlock
2 つ以上のスレッドが互いにロックを解放するのを待って永遠にブロックされている。
jvmspring
このエラーの原因
スレッド A がロック 1 を保持しながらロック 2 を待ち、スレッド B がロック 2 を保持しながらロック 1 を待つ。どちらのスレッドも処理を進められず、アプリケーションがハングする。これは例外ではなくランタイム状態。
修正方法
ロックは常に一定の順序で取得します。タイムアウト付きの tryLock() を使います。synchronized ブロックの範囲を最小限にします。ロックを手動で扱う代わりに、java.util.concurrent のユーティリティを使います。デッドロックの検出には jstack を使います。
関連するエラーコード
Java例外エラー
ArrayStoreExceptionArrayStoreException
配列に型の合わない型のオブジェクトを格納しようとした。
jvmandroid
詳細を表示 Java例外エラー
NullPointerExceptionNullPointerException
オブジェクトが必要な箇所で null 参照が使用されている。
jvmandroidspring
詳細を表示 Java例外エラー
NegativeArraySizeExceptionNegativeArraySizeException
負のサイズで配列を生成しようとした。
jvmandroid
詳細を表示 Java例外エラー
ConcurrentModificationExceptionConcurrentModificationException
コレクションのイテレーション中に、そのコレクションが変更された。
jvmandroidspring
詳細を表示 Java例外致命的
LinkageErrorLinkageError
クラスが非互換な変更を受けた別のクラスに依存している。
jvm
詳細を表示 Java例外エラー
ClosedChannelExceptionClosedChannelException
すでに閉じられたチャネルに対して操作が試みられた。
jvm
詳細を表示