返回介绍

4. 什么是死锁

发布于 2024-09-08 13:17:47 字数 1938 浏览 0 评论 0 收藏 0

死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时 称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象:死 锁。”

public class MyTestSiSuo {
 
    private static  Object o1 = new Object();
    private static  Object o2 = new Object();
    
    public static void main(String[] args) {
        
        Thread t1 = new Thread(){
            @Override
            public void run(){
                //抢占资源 o1
                synchronized (o1) {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("t1 ---Get o1");
                    
                    //需要资源 o2 但是 t2 独占(未释放) -->互相竞争资源-->死锁
                    synchronized(o2){
                        System.out.println("t1 ---Get o2");
                    }
                    
                    
                }
            }
            
        };
        
        
        Thread t2 = new Thread(){
            @Override
            public void run(){
                //抢占资源 o2
                synchronized (o2) {
                    System.out.println("t2 ---Get o2");
                    
                    //需要资源 o1,但是 t1 独占(未释放) -->互相竞争资源-->死锁
                    synchronized (o1) {
                        System.out.println("t2 ---Get o1");
                    }
                }
                
            }
            
        };
        
        
        t1.start();
        t2.start();
        
        
                
    }
    
 
}

实现过程:

  • 有公共资源 o1,o2;程序开始,线程 t2 抢占资源 o2,在同步代码块中,o1 也被抢占;线程 t1 睡眠等待 1000ms;
  • t2 在需要资源 o1 时,此时发现被 t1 独占,而 t1 此时睡眠醒来,需要资源 o2,发现被 t2 独占;由此,产生 死锁;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文