mxllcf

导航

多线程演示死锁——必然死锁的情况

package background;

/**
 * @author leon
 * @描述 第二种线程安全问题,演示死锁问题。
 */
public class MultiThreadError implements  Runnable{
    int flag = 1;
    static Object o1 = new Object();
    static Object o2 = new Object();

    public static void main(String[] args) {
        MultiThreadError multiThreadError1 = new MultiThreadError();
        MultiThreadError multiThreadError2 = new MultiThreadError();
        multiThreadError1.flag = 1;
        multiThreadError2.flag = 0;
        new Thread(multiThreadError1).start();
        new Thread(multiThreadError2).start();

    }

    @Override
    public void run() {
        System.out.println("flag" + flag);
        if (flag == 1) {
            synchronized (o1) {
                try {
                    Thread.sleep(500);
                    System.out.println("我是1");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (o2) {
                    System.out.println("1");
                }
            }
        }

        if (flag == 0) {
            synchronized (o2) {
                try {
                    Thread.sleep(500);
                    System.out.println("我是0");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (o1) {
                    System.out.println("0");
                }
            }
        }
    }
}

  

 

互不释放自己手中已有的资源,导致必然发生死锁。

 

 

 最后的1 和 0 始终不会被打印出来。

 

posted on 2021-10-20 15:25  mxllcf  阅读(35)  评论(0)    收藏  举报