如果我有一台具有以下结构的显示器
if( [condition lock condition])
{
do{
cond.lock()
}while([condition lock condition]);
}
ReentrantLock(true)会阻止任何可能的饥饿案件吗?将true作为ReentrantLock()构造函数的参数创建一个由JVM管理的FIFO队列;但是,如果我们继续使用while循环调用cond.lock()是不是某个线程可能会饿死?
答案 0 :(得分:1)
构造函数的布尔参数是针对公平性的。在这种情况下,优先考虑最长的等待线程。它对您描述的场景没有影响。
同一个线程的递归锁定没有饥饿问题。但这样的电话有2147483647的限制。
答案 1 :(得分:0)
所有可重入的方法是,如果代码需要锁定对象已经有,它将继续。
http://docs.oracle.com/javase/tutorial/essential/concurrency/newlocks.html