饥饿预防和ReentrantLock(真实);

时间:2013-11-16 18:36:21

标签: java multithreading

如果我有一台具有以下结构的显示器

 if( [condition lock condition])
 {

    do{

    cond.lock()


    }while([condition lock condition]);
 }

ReentrantLock(true)会阻止任何可能的饥饿案件吗?将true作为ReentrantLock()构造函数的参数创建一个由JVM管理的FIFO队列;但是,如果我们继续使用while循环调用cond.lock()是不是某个线程可能会饿死?

2 个答案:

答案 0 :(得分:1)

构造函数的布尔参数是针对公平性的。在这种情况下,优先考虑最长的等待线程。它对您描述的场景没有影响。

同一个线程的递归锁定没有饥饿问题。但这样的电话有2147483647的限制。

http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/ReentrantLock.html#ReentrantLock(boolean)

答案 1 :(得分:0)

所有可重入的方法是,如果代码需要锁定对象已经有,它将继续。

http://docs.oracle.com/javase/tutorial/essential/concurrency/newlocks.html