• 技术文章 >数据库 >MySQL

    mysql死锁的四个条件

    小妮浅浅小妮浅浅2021-05-24 14:24:42原创154

    1、四个条件

    互斥条件:一个资源每次只能被一个进程使用。

    请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。

    不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。

    循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

    2、实例

    public class DeadLockDemo {
        public static Object one = new Object();
        public static Object two = new Object();
        public static void main(String[] args) {
            new Thread(() -> {
             //获取第一个锁,并且不会被其他线程抢占
                synchronized (one) {
                    try {
                        System.out.println(Thread.currentThread().getName() + "获得one锁,等待two锁。");
                        //确保第二个线程此时先获取到了第二个锁
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    //请求获取第二锁,并且任然持有第一个锁
                    synchronized (two) {
                        System.out.println(Thread.currentThread().getName() + "获得two锁。");
                    }
                }
            }).start();
            new Thread(() -> {
                synchronized (two) {
                    try {
                        System.out.println(Thread.currentThread().getName() + "获得two锁,等待one锁。");
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (one) {
                        System.out.println(Thread.currentThread().getName() + "获得one锁。");
                    }
                }
            }).start();
        }
    }

    以上就是mysql死锁的四个条件,希望对大家有所帮助。更多mysql学习指路:MySQL

    专题推荐:mysql死锁
    上一篇:mysql如何解除死锁 下一篇:mysql行锁的优化

    相关文章推荐

    • mysql间隙锁是什么• mysql共享锁是什么• mysql中如何共享读锁• mysql使用表锁的两种情况• mysql中通信协议的介绍• mysql查询的执行过程• mysql索引的最左原则是什么• eclipse连接mysql• mysql使用关联查询的注意点• mysql中LIMIT分页如何优化• mysql查询优化策略有哪些• mysql乐观锁如何实现• mysql排它锁是什么
    品易云

    全部评论我要评论

  • 取消发布评论发送
  • 

    Python学习网