博为峰Java技术题 ——JavaSE 避免死锁Ⅰ

在有些状况下死锁是能够避免的。下面将展现三种用于避免死锁的技术线程

[加锁顺序]3d

博为峰小博老师:code

当多个线程须要相同的一些锁,可是按照不一样的顺序加锁,死锁就很容易发生。blog

若是能确保全部的线程都是按照相同的顺序得到锁,那么死锁就不会发生。看下面这个例子:排序

4.1.tmp_副本.png

若是一个线程(好比线程3)须要一些锁,那么它必须按照肯定的顺序获取。它只有得到了从顺序上排在前面的锁以后,才能获取后面的锁。get

例如,线程2和线程3只有在获取了锁A以后才能尝试获取锁C(获取锁A是获取锁C的必要条件)。由于线程1已经拥有了锁A,因此线程2和3须要一直等到锁A被释放。而后在它们尝试对B或C加锁以前,必须成功地对A加了锁。im

按照顺序加锁是一种有效的死锁预防机制。可是,这种方式须要你事先知道全部可能会用到的锁(并对这些锁作适当的排序),但总有些时候是没法预知的。技术

相关文章
相关标签/搜索