Java死锁代码示例


import sun.rmi.runtime.Log;

public class DeadLockTest {
    public static void main(String[] args) {
        final  Object lockA = new Object();
        final Object lockB = new Object();
        ProductThreadA productThreadA = new ProductThreadA(lockA,lockB);
        ProductThreadB productThreadB = new ProductThreadB(lockA,lockB);

        Thread threadA = new Thread(productThreadA);
        Thread threadB = new Thread(productThreadB);
        threadA.start();
        threadB.start();
    }

    //生产者A
    static class  ProductThreadA implements Runnable{

        private Object lockA;
        private Object lockB;
        ProductThreadA(Object lockA,Object lockB){
            this.lockA = lockA;
            this.lockB =lockB;
        }
        @Override
        public void run() {
//这里一定要让线程睡一会儿来模拟处理数据 ,要不然的话死锁的现象不会那么的明显.这里就是同步语句块里面,首先获得对象锁lockA,然后执行一些代码,随后我们需要对象锁lockB去执行另外一些代码.
            synchronized (lockA){
                //这里一个log日志
                System.out.println("ThreadA lock  lockA");
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (lockB){
                    //这里一个log日志
                    System.out.println("ThreadA lock  lockB");
                    try {
                        Thread.sleep(2000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                }
            }
        }
    }
    //生产者B
    static class  ProductThreadB implements Runnable{
        //我们生产的顺序真好好生产者A相反,我们首先需要对象锁lockB,然后需要对象锁lockA.
        private Object lockA;
        private Object lockB;
        ProductThreadB(Object lockA,Object lockB){
            this.lockA = lockA;
            this.lockB =lockB;
        }
        @Override
        public void run() {
            synchronized (lockB){
                //这里一个log日志
                System.out.println("ThreadB lock  lockB");
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (lockA){
                    //这里一个log日志
                    System.out.println("ThreadB lock  lockA");
                    try {
                        Thread.sleep(2000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                }
            }
        }
    }
    //这里运行线程
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值