zoukankan      html  css  js  c++  java
  • 死锁

       在众多的应用程序中,使用锁的情况一般要多于无锁。因为对于应用来说,如果业务逻辑很复杂,会极大增加无锁的编程难度。但如果使用锁,我们就不得不对一个新的问题引起重视——那就是死锁。
        
      那什么是死锁呢?通俗的说,死锁就是两个或者多个线程,相互占用对方需要的资源,而都不进行释放,导致彼此之间都相互等待对方释放资源,产生了无限制等待的现象。死锁一旦发生,如果没有外力介入,这种等待将永远存在,从而对程序产生严重的影响。 
     
     如果在实际环境中,遇到了这种情况,通常的表现就是相关的进程不再工作,并且CPU占用率为0(因为死锁的线程不占用CPU),不过这种表面现象只能用来猜测问题。如果想要确认问题,还需要使用JDK提供的一套专业工具。
        
        首先,我们可以使用jps命令得到java进程的进程ID,接着使用jstack命令得到线程的线程堆栈
     
    避免死锁的方式:
        1.使用无锁的函数
        2.使用重入锁,通过重入锁的中断或者限时等待可以有效规避死锁带来的问题 
  • 相关阅读:
    xml的建模
    P1341 无序字母对
    P1330 封锁阳光大学
    P2661 信息传递
    P1312 Mayan游戏
    P1514 引水入城
    C. Sad powers
    P1195 口袋的天空
    P1821 [USACO07FEB]银牛派对Silver Cow Party
    P1396 营救
  • 原文地址:https://www.cnblogs.com/756623607-zhang/p/6965314.html
Copyright © 2011-2022 走看看