多线程之死锁

今日,在复习多线程知识,本篇内容是为了学习后,为了防止遗忘。只针对死锁的产生原因,如何死锁进行简单的解释和演示。

死锁产生原因(简单的列子说明):
1,线程1,占有对象1时,同时还想占有对象2.
2,线程2,占有对象2时,想占有对象1.
3,俩个对象都等待着对象释放 ,就这样一直等待着。
从而导致了死锁的产生。
产生死锁的过程演示:

 public static void main(String[] args) {
        Hero h1 = new Hero(new StringBuffer("貂蝉"), 600.0f, 120);
        Hero h2 = new Hero(new StringBuffer("伽罗"), 550.0f, 150);

        Thread t1 = new Thread(){ //匿名方法
            public void run(){
                synchronized (h1){
                    System.out.println("t1 已经占有貂蝉");
                    try {

                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("等待占有伽罗中.....");
                    synchronized(h2){
                        System.out.println("t1,又已经占有伽罗");
                    }
                }
              
            }
        };
        t1.start();

        Thread t2 = new Thread(){
            public void run() {
                synchronized (h2) { 
                    System.out.println("t2 已经占有伽罗");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                    System.out.println("等待占有貂蝉中.....");
                    synchronized (h1) {
                        System.out.println("t2,又已经占有貂蝉");

                    }
                }
                
            }
        };
        t2.start();
    }
}

结果:
t2 已经占有伽罗
t1 已经占有貂蝉
等待占有伽罗中…
等待占有貂蝉中…

运行后的结果表示双方线程一直在等待着 对方先释放对象,就这样一直等待…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值