java并发编程实战(4)-活跃性危险:死锁

死锁:java

   java程序没法从死锁中恢复过来,在设计时必定要排除有可能发生死锁的地方。线程

一、锁顺序死锁:设计

    若是全部线程都以固定的顺序来获取锁,那么就不会出现死锁。对象

    A、B两个锁,方法1是先锁A,再锁B,方法2是先锁B,再锁A。开发

    线程1调用方法1锁住了 A ,尝试去获取B ,线程2调用方法2锁住了 B,尝试去获取 A 同步

二、动态的锁顺序死锁:程序

    因为参数的传递不可控,致使锁顺序死锁。方法

 三、协助对象之间发生死锁时间

    若是在持有锁时调用某个外部方法,那么将出现活跃性问题。在这个外部方法中可能会获取其余锁(可能会产生死锁),或者阻塞时间过长,致使其余线程没法及时获取当前被持有的锁。阻塞

四、开发调用

    调用某个方法时不须要持有锁,那么这种调用被称为开发调用。尽量的不要在方法体上直接加同步锁,而是在须要被保护涉及共享状态的操做上加锁。

五、

相关文章
相关标签/搜索