首页 > 试题广场 >

什么是死锁?JAVA程序中什么情况下回出现死锁?如何避免出现

[问答题]
什么是死锁?JAVA程序中什么情况下回出现死锁?如何避免出现死锁?
死锁是一种特定的程序状态,在实体之间,由于循环依赖导致彼此一直处于等待之中,没有任何个体可以继续前进。死锁不仅仅会发生在线程之间,存在资源独占的进程之间同样也可能出现死锁。通常来说,我们大多是聚焦在多线程场景中的死锁,指两个或多个线程之间,由于互相持有对方需要的锁,而永久处于阻塞的状态。

基本上死锁的发生是因为:

  • 互斥条件,类似Java中Monitor都是独占的,要么是我用,要么是你用。
  • 互斥条件是长期持有的,在使用结束之前,自己不会释放,也不能被其它线程抢占。
  • 循环依赖关系,两个或者多个个体之间出现了锁的链条环。

免死锁的思路和方法。

1、如果可能的话,尽量避免使用多个锁,并且只有需要时才持有锁。

2、如果必须使用多个锁,尽量设计好锁的获取顺序。
3、使用带超时的方法,为程序带来更多可控性
发表于 2021-02-24 14:32:44 回复(0)
死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。
发表于 2021-01-17 23:50:59 回复(0)