JDK5提供的显式锁可中断的锁可设置超时的锁及设置超时时间的弊端

2018-02-19  本文已影响14人  每天学点编程

请关注我的微信公众号

个人微信公众号

技术交流群 (仅作技术交流):642646237

​请关注我的头条号:

JDK5提供的显式锁

Java 5引入java.util.concurrent包。
ReentrantLock提供了显式的lockunlock方法,可以突破上述几个限制。

JDK5提供的显式锁ReentrantLock

JDK5提供的显式锁ReentrantLock可中断的锁

ReentrantLock替代内置锁,使用lockInterruptibly()方法

上面的代码可以使用Thread.interrupt()让线程终止。

JDK5提供的显式锁ReentrantLock超时 解决哲学家就餐问题

可以为获取锁的操作设置超时时间。



与lock()相比,tryLock()有超时机制。
上面实现的哲学家就餐问题的代码并不会死锁(至少不会无尽地死锁下去)。

活锁

哲学家就餐问题的tryLock()方案避免了无尽的死锁,但这并不是一个好的方案。

首先,不能避免死锁——只是提供了从死锁中恢复的手段。
其次,受到活锁现象的影响——如果所有死锁线程同时超时,极有可能再次陷入死锁。虽然死锁没有永远持续下去,但对资源的争夺状况却没有得到任何改善。
减小活锁的几率方法:为每个线程设置不同的超时时间,来减少所有线程同时超时的几率。

上一篇下一篇

猜你喜欢

热点阅读