关于死锁的粗浅理解
Java中synchronized同步的个人见解_porkczr的博客-CSDN博客
Java线程同步:synchronized锁住的是代码还是对象_叉叉哥的BLOG-CSDN博客_synchronized锁的是对象还是方法
当两个线程都有一把自己的锁时又互相调用对方的锁,此时又同时执行自己的方法 那么就可能互相锁死,就产生了死锁
以下是死锁的图解:
①首先有两个线程,它们分别有一把锁 合计两把锁
②然后它们在自己的run()主体代码中分别又上了一把锁
③最后两个线程被同时调用
④此时两个对象都会进入自己的run()方法,并且在使用第一重锁后,当它们想使用继续进入第二重锁时就产生了死锁
这里有个细节就是synchronized() 括号里面的是锁要锁住的对象,同时也是锁的名字,如例子中的“dx” “bx”
如果在不同的地方出现同一个synchronized(指的是括号里对象相同),那么它们其实就是同一把锁,如果线程都在调用这个锁,自然就会产生死锁,而原因也很简单,synchronized锁都存在一个常量池里,就类似字符串,名字相同,那么指向的就是同一把锁
当然 因为代码总有上下行 只要够快 什么死锁都不是事 执行下一行前我上一行代码全部执行完 自然不存在互锁情况
总之死锁要避免 不允许出现