02怎么防止死锁?
1、避免多次锁定。尽量避免同一个线程对多个Lock进行锁定。例如上面的死锁程序,主线程要对A、B两个对象的Lock进行锁定,副线程也要对A、B两个对象的Lock进行锁定,这就埋下了导致死锁的隐患。2、具有相同的加锁顺序。如果多个线程需要对多个Lock进行锁定,则应该保证它们以相同的顺序请求加锁。比如上面的死锁程序,主线程先对A对象的Lock加锁,再对B对象的Lock加锁;而副线程则先对B对象的Lock加锁,再对A对象的Lock加锁。这种加锁顺序很容易形成嵌套锁定,进而导致死锁。如果让主线程、副线程按照相同的顺序加锁,就可以避免这个问题。3、使用定时锁。程序在调用acquire()方法加锁时可指定timeout参数,该参数指定超过timeout秒后会自动释放对Lock的锁定,这样就可以解开死锁了。4、死锁检测。死锁检测是一种依靠算法机制来实现的死锁预防机制,它主要是针对那些不可能实现按序加锁,也不能使用定时锁的场景的。
来自:操作系统-死锁-死锁预防