假设我有三个线程,线程1、线程2和线程3都共享相同的锁。线程2获取锁,做一些工作,然后通过调用等待方法来阻止。然后线程1获取锁,做一些工作,在锁的中间,线程3试图获取锁,但由于线程1持有锁,线程3被阻塞。线程1完成工作,并在终止前向线程2发出信号,表示它可以重新获得锁。那会发生什么呢?接下来线程2或线程3会获得锁吗?
非常感谢您的时间和帮助提前。
发布于 2014-04-23 02:32:57
如果没有优先权,谁先来谁就会得到锁。
虽然mutual exclusion可以提供safety属性,但它不能确保liveness属性。在某些情况下,线程总是先来获取锁,从而导致starvation (其他线程会永远等待,因为有人一直占住)。
谷歌的关键词突出显示将帮助您了解更多。我发现这些幻灯片非常全面的schedule.pdf
发布于 2014-11-19 18:56:16
如果使用的是ReentrantLock (或其任何子类),则可以将“公平”标志传递给构造函数。如果设置为true,这将确保锁的控制传递给等待时间最长的线程,在本例中是线程1。
Lock lock = new ReentrantLock(true);https://stackoverflow.com/questions/23233623
复制相似问题