Java关于死锁的产生

本章主要讲述的是死锁的产生和必然产生死锁的代码。在Java中死锁,是指多个线程同时给阻塞,它们中的一个或者多个都在等待某一个资源释放。

死锁产生的四个必要条件

  1. 互斥使用:即当资源被一个线程使用(占用)时,另外的线程无法进行访问或者使用
  2. 不可抢占:即资源请求者请求资源时不能强制从资源占有者抢走资源,只能等待资源占有者自己释放资源。
  3. 请求和保持:资源请求者向外请求资源并保持已占有资源不释放。
  4. 循环等待:即存在一个等待循环队列,a要b的资源,b要a的资源。

必然产生死锁的代码

public class ThreadDead {
    public static Object resources01 = new Object();
    public static Object resources02 = new Object();

    public static void main(String[] args) {

        //经销商
        new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (resources01) {
                    System.out.println("线程1占用了资源1,开始请求资源2");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (resources02) {
                        System.out.println("线程1占用了资源1且占用了资源2");
                    }
                }
            }
        }).start();

        //客户
        new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (resources02) {
                    System.out.println("线程2占用了资源2,开始请求资源1");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (resources01) {
                        System.out.println("线程2占用了资源2且占用了资源1");
                    }
                }
            }
        }).start();
    }
}
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值