Java程序中的死锁

什么是死锁?工具

        死锁是一种特定的程序状态,主要是因为循环依赖致使彼此一直处于等待中,而使得程序陷入僵局,至关尴尬。死锁不单单发生在线程之间,而对于资源独占的进程之间一样可能出现死锁。一般来讲,咱们所说的死锁,是指两个或多个线程之间,因为互相持有对方所须要的锁,进而产生永久阻塞的状况。举个栗子,线程1手里有锁A,它想要得到锁B,与此同时,线程2手里有锁B,它想要得到锁A,相持不下,那么这两个线程将永远地等待下去。线程

  一句话,计算机资源有限,你们互相占着资源而不放手,并且还想要更多,致使计算机say no.设计

 
定位死锁

        最多见的方式是利用jstack等工具获取线程,而后定位互相之间的依赖关系,而后找到死锁。若是是比较明显的死锁,是能够直接定位到了,相似JConsole,甚至于经过图形界面进行有限的死锁检测。orm

 

死锁的诞生blog

        1.互斥条件 资源独占,若其余进程使用,必须等待;进程

        2.长期持有 死锁一直存在,本身不会释放,也不能被释放; 资源

        3.循环依赖关系 彼此等待,造成进程循环等待环。io

 

痛快一点的处理方法:网管,重启form

 

如何防患?class

         1.尽可能避免使用多个锁(若是有可能的话)。

         2.规范的使用多个锁,并设计好锁的获取顺序。

         3.随用随放。便是,手里有锁,若是还要得到别的锁,必须释放所有资源才能各取所需。

         4.规范好循环等待条件。好比,使用超时循环等待,提升程序可控性

相关文章
相关标签/搜索