A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ....... 中级黑马   /  2014-2-19 16:45  /  903 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

多线程中造成死锁的原因是不是 第2个线程拿着第三个线程的钥匙 第三个线程拿着第二个线程的钥匙?

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

5 个回复

倒序浏览
貌似这样  我也不怎么理解。。   多在等待对方释放资源,然后就锁住了。  
回复 使用道具 举报
数据库书 和 操作系统书上都有  你可以看看  :
产生死锁的四个必要条件:
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。发生死锁的原因一般是两个对象的锁相互等待造成的。通常,死锁的出现是同步中嵌套同步。
那么为什么会产生死锁呢?
1.因为系统资源不足。
2.进程运行推进的顺序不合适。   
3.资源分配不当。
操作系统的书上写的,死锁产生的条件有四个:
1.互斥条件:所谓互斥就是进程在某一时间内独占资源。
2.请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
3.不剥夺条件:进程已获得资源,在末使用完之前,不能强行剥夺。
4.循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
死锁是因为多线程访问共享资源,由于访问的顺序不当所造成的,通常是一个线程锁定了一个资源A,而又想去锁定资源B;在另一个线程中,锁定了资源B,而又想去锁定资源A以完成自身的操作,两个线程都想得到对方的资源,而不愿释放自己的资源,造成两个线程都在等待,而无法执行的情况。
我们在java中使用synchonized的时候要考虑这个问题,如何解决死锁,可以从死锁的四个条件去解决,只要破坏了一个必要条件,那么就不会产生死锁。在java中使用多线程的时候一定要考虑是否有死锁的问题。




评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
举例比较常见的死锁,
        每个同步只有一个对应的锁,相互嵌套时同时持有两个锁才会执行,一旦两个同步都持有一个对方的锁无法执行也无法释放,就会导致线程死锁

如下面这两个run方法同时执行,就会造成死锁
            public void run()  {  
        synchronized(MyLock.a)  {  
            synchronized(MyLock.b)        {
                                .....;
            }  
        }  
    }  
            public void run()  {  
        synchronized(MyLock.b)  {  
            synchronized(MyLock.a)        {
                                .....;
            }  
        }  
    }

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 Amorvos 于 2014-2-19 22:43 编辑

如果是两个线程的话造成死锁的原因是thread0已经持有锁1,thread1已经持有锁2,
此时thread0运行到代码需要申请锁2,但锁1不释放
此时thread1运行到代码需要申请锁1,但锁2不释放
由于thread0持有的锁1与thread1持有的锁2均未释放,两个线程相互等待。
这与造成操作系统死锁的原因是一样的,可以帮助你理解,即一个资源每次只能被一个进程使用;一个进程因请求资源而阻塞时,对已获得的资源保持不放;进程已获得的资源,在末使用完之前,不能强行剥夺;干进程之间形成一种头尾相接的循环等待资源关系。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马