Javaマルチスレッドデッドロックケース(コードケース)

Javaマルチスレッドデッドロックケース(コードケース)

デッドロックとは

  • スレッドがAオブジェクトロックを保持してBオブジェクトロックを待機すると、別のスレッドがBオブジェクトロックを保持してAオブジェクトロックを待機し、デッドロックが発生します。
  • スレッドは複数のオブジェクトのロックマークを同時に保持できます。スレッドがブロックされると、スレッドが既に所有しているロックマークが解放されず、デッドロックが発生する可能性もあります。

事例紹介:

寮に残っている靴が1足しかない場合は、この時点でシャオミンとシャオペンの両方が出て行きます。一方は左の靴を、もう一方は右の靴を手に入れますが、誰にも渡してはいけないので、ほとんど死に至ります。ロック現象のため、誰も外に出てはいけません。

package com.nxw.Thread.dieLock;

public class DieLock{
    
    

    public static void main(String[] args) {
    
    
        Runnable xiaoming = new Runnable() {
    
    
            public void run() {
    
    
                synchronized (Shoes.left){
    
    
                    System.out.println("小明拿到了左脚鞋子");
                    synchronized (Shoes.right){
    
    
                        System.out.println("小明拿到了右脚鞋子,他可以穿鞋子走人了。。。");
                    }
                }
            }
        };

        Runnable xiaopeng = new Runnable() {
    
    
            public void run() {
    
    
                synchronized (Shoes.right){
    
    
                    System.out.println("小朋拿到了右脚鞋子");
                    synchronized (Shoes.left){
    
    
                        System.out.println("小朋拿到了左脚鞋子,他可以穿鞋子走人了。。。");
                    }
                }
            }
        };

        Thread thread1 = new Thread(xiaoming,"小明");
        Thread thread2 = new Thread(xiaopeng,"小朋");

        thread1.start();
        thread2.start();
    }


}

class Shoes {
    
    
    public static String left = "leftShoes";
    public static String right = "rightShoes";
}

コードの投稿を容易にするために、それらはすべて1つのクラスに書き込まれます。
さらに数回実行すると、XiaoMingとXiaoPengがたまたま靴を掴んだときに、デッドロックが発生したことがわかります。
ここに写真の説明を挿入

したがって、作業でマルチスレッドを操作するときは、デッドロックを回避するように注意する必要があります。

おすすめ

転載: blog.csdn.net/nxw_tsp/article/details/109265461