对死锁的理解

死锁,顾名思义就是,无法运行了,不能进行下去,对程序的执行伤害很大。

官方一点的话就是,指两个及其两个以上的进程在执行过程中,由于竞争资源或者彼此通信造成的一种阻塞现象,若无外力因素干扰,就无法接触,此时系统处于死锁状态或产生了死锁,永远处于互相等待的进程就称为死锁。

举一个死锁生活中的例子:小明和小丽分别被关在两个不同的房间,小明身上有小丽房间开门的钥匙,小丽身上有小明房间的钥匙,小明想要出去救小丽,就得有小丽身上的钥匙,显然他得不到,小丽想要等小明来救,就得把身上得到钥匙给小明,她要给就要出去,就得有小明身上的钥匙,显然她也做不到,这种情况就陷入了死锁的情况

转化为程序就是对死锁的理解_第1张图片

产生死锁的场景

1.如果对一个线程尝试加两把锁,并且锁是不可重入的锁时,就会产生死锁。

2.两个线程有两把锁(如上图情境下的问题)。

3.循环等待,如线程1尝试获取锁1和锁2,线程2尝试获取锁2和锁1

站在开发的角度实现的一些方案并避免死锁

1.就尽量避免在一个锁中尝试获取其他锁,但是并不是所有的代码都能避免的了的

2.如果实在需要嵌套锁,就需要给加锁实行一定的顺序

比如n个线程需要获取n把锁,那么就按照locker1,locker2.。。locker n-1,locker n,的顺序获取锁,这就破坏了死锁的循环等待这个条件~

你可能感兴趣的:(java)