欢迎来到萧静默的博客

书山有路勤为径,学海无涯苦作舟。

Java-多线程-线程死锁代码实现

package cn.bruce.Thread;

public class LockDemo {
    public final static void main(String[] args) {
        // 创建线程任务类对象
        DeadLock DL = new DeadLock();
        // 创建两个线程
        Thread t0 = new Thread(DL);
        Thread t1 = new Thread(DL);
        // 启动线程
        t0.start();
        t1.start();
    }
}

// 定义锁对象类
class Locka {
    private Locka()
    {
    }
    //定义唯一对象
    public static final Locka LOCKA = new Locka();
}

// 定义锁对象类
class Lockb {
    private Lockb()
    {
    }
//定义唯一对象
    public static final Lockb LOCKB = new Lockb();
}

// 定义线程任务类
class DeadLock implements Runnable {
    private int i;

    @Override
    public void run() {
        while (true)
        {
            if (i % 2 == 0)
            {// 先进入A同步,再进入B同步
                synchronized (Locka.LOCKA)
                {
                    System.out.println("if...Locka");
                    synchronized (Lockb.LOCKB)
                    {
                        System.out.println("if...Lockb");
                    }
                }
            } else
            {// 先进入B同步,再进入A同步
                synchronized (Lockb.LOCKB)
                {
                    System.out.println("else...Lockb");
                    synchronized (Locka.LOCKA)
                    {
                        System.out.println("else...Locka");
                    }
                }
            }
            i++;
        }

    }

}

 

 由上图可见,程序是没结束的,只是卡死了,正常情况应该是一组一组交替出现if和else ,当不是一对一对出现时,就会发生死锁了。

posted @ 2020-08-28 14:38  萧静默  阅读(410)  评论(0编辑  收藏  举报