这篇文章将为大家详细讲解有关怎么在java中预防死锁,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
Java有哪些集合类
Java中的集合主要分为四类:1、List列表:有序的,可重复的;2、Queue队列:有序,可重复的;3、Set集合:不可重复;4、Map映射:无序,键唯一,值不唯一。
1、按照一定的顺序获取锁
若要获得多个锁,则需要在设计时充分考虑不同线程之前获得锁的顺序。对于两个特定的锁,开发者可以尝试获取两个锁,按照锁对象的hashCode值大小的次序,使锁始终按特定的次序获取锁,从而避免出现死锁。
当有多个线程同时运行时,只需按锁对象的hashCode简单地排序(仅仅按hashCode的次序排序将出现“循环等待”),可能无法满足需求,此时开发者可以使用银行家算法,将所有的锁按特定的次序排序,同样可以防止死锁。
2、超时放弃
如果使用synchronized关键字提供的内置锁,则只要线程不获取锁,则将永远等待,但是Lock接口提供了boolean tryLock(longtime,TimeUnitunit) throws InterruptedException方法,该方法可以按固定时间等待锁,所以线程可以在获取锁超时之后主动释放所有已获得的锁。这样,死锁也可以很有效地避免。
关于怎么在java中预防死锁就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。