zoukankan      html  css  js  c++  java
  • Java程序中的死锁

    什么是死锁?

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

      一句话,计算机资源有限,大家互相占着资源而不放手,而且还想要更多,导致计算机say no.

     
    定位死锁

            最常见的方式是利用jstack等工具获取线程,然后定位互相之间的依赖关系,然后找到死锁。如果是比较明显的死锁,是可以直接定位到了,类似JConsole,甚至于通过图形界面进行有限的死锁检测。

    死锁的诞生

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

            2.长期持有 死锁一直存在,自己不会释放,也不能被释放; 

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

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

    如何防患?

             1.尽量避免使用多个锁(如果有可能的话)。

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

             3.随用随放。即是,手里有锁,如果还要获得别的锁,必须释放全部资源才能各取所需。

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

  • 相关阅读:
    GIS开发 坐标系问题
    IE不支持option的display样式,只能使用remove和add【转】
    使用jQuery解决IE不支持的option disable属性【转】
    mount 时遇到connection unfused 错误操作
    调试onvif 用到的一些工具。。linux 命令!
    jQuery实现删除option控件下的元素
    去掉input 输入框的边框
    Json文件读取
    JQuery 改指定的内容 设置隐藏内容为可见
    Ubuntu 下静态IP修改
  • 原文地址:https://www.cnblogs.com/fuguoliang/p/9509695.html
Copyright © 2011-2022 走看看