死锁

死锁

作者心得:
**死锁是一种现象,并没有语言之分。**因为我自己在刚开始知道死锁这个名词的时候我就以为他只是这一个语言所存在的问题,其实死锁并不是,它是多线程这个功能的通病。后来通过大量的博客及各种官方文章的查询终于恍然大悟,可是会发现它们写的都特别的复杂,于是我这里就使用简单的语言进行讲解这个现象,并不去提供解决方案,只了解这个现象,废话不多说我们往下看:

通常表现:

​ 程序出现僵持状态,没有任何的输出也不执行任何代码也并不是什么栈溢出,更准确的来说是逻辑出现了问题,导致计算机无法自行选择,就站在原地不动

口语化详解:

​ 我们都知道使用synchonized程序块进行代码上锁时上锁的是一个对象死锁只会出现于两个或两个以上的线程对象任务中,我们先来看一个代码,不要求看懂后期慢慢详解

public class a implements Runnable{
    ...省略a、b这两个对象的声明
	public void run (){
    	synchonized (a){//对a进行了上锁,此时等待b的到来,线程的这个锁如果进不去它会等着的直到进去了为止,也就是说它会一直想要去拿b而不是我拿一次如果没拿到就算了
        	synchonized (b){
            
            }
        }
    }
}
public class b implements Runnable{
    ...省略a、b这两个对象的声明
	public void run(){
    	synchonized (b){//对b进行了上锁,此时等待a的到来,线程的这个锁如果进不去它会等着的直到进去了为止,也就是说它会一直想要去拿b而不是我拿一次如果没拿到就算了
        	synchonized (a){
            
            }
        }
    }
}

此时我们会发现一个问题"a对象和b对象都被锁住了而都还在等着另一个的到来,于是就等啊等啊等成了永恒"这就是死锁

总结:

​ 死锁就像谈恋爱,明明互相喜欢但是都不说,等着对方先开口,可是都是好强的劲儿,于是就等啊等啊等成了永恒

如果还是没有看懂的话可以参考这个讲的不是很好但是还行的视频进行参考然后再反复品文章应该就悟到了,希望有帮助到大家,谢谢~

相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页