1. プロセスのデッドロックと解決策
1. 重要なヒント
(1) デッドロックの概念とデッドロックの根本原因をマスターします。
(2) デッドロックの必要条件を理解する - 相互排除条件、非プリエンプション条件、占有および適用条件、ループ待機条件の 4 つの条件が同時に満たされる必要があります。
(3) デッドロックの一般的な解決方法を覚え、デッドロックの予防と回避の基本的な考え方を習得します。
(4) デッドロック防止戦略におけるリソースの秩序ある割り当て戦略をマスターする。
(5) プロセス安全シーケンスの概念とデッドロックと安全シーケンスの関係を理解する。
(6) バンカーのアルゴリズムを理解する。
(7) リソース割り当て図を理解する。
(8) デッドロックの検出と回復の考え方を理解する。
2. デッドロックについて、私の個人的な理解:
一定の期間勉強した後、私が理解したデッドロックの概念は、たとえば、2 つのプロセスがあり、各プロセスは 2 つのロック (ロック 1) によってロックされている、というものです。 、ロック2)、ロックされています。違いは、ロックを適用する場所が 2 つのプロセスで異なることです。その結果、プロセスを完全に起動するには内部ロックが必要になりますが、このロックはたまたま別のプロセス内にあります。別のプロセスが内部プロセスを完全に開始 (または実行) するために必要なロックは、別のプログラム内にあります。このように、それらは相互に結びついており、準備はできているが実行できない状態にあります。デッドロック状態を引き起こしました。私の理解に基づいて概略図を描きました:
public class Test15 {public static void main(String[] args) throws InterruptedException {new Thread(new DeadLockThread(true)).start();//Thread.sleep(10);在中间用上它可以使结果交替出现,我是为了看死锁的效果,用它对比一下。new Thread(new DeadLockThread(false)).start(); } }class DeadLockThread implements Runnable {static Object o1 = new Object();static Object o2 = new Object();private boolean flag; DeadLockThread(boolean flag) {this.flag = flag; }public void run() {if (flag == true) {while (true) {synchronized (o1) { System.out.println("这是锁o1");synchronized (o2) { System.out.println("这是锁o2"); }
出力結果:
以上がJava におけるデッドロックの概念と解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。