2

我在 Java 中实现了一个阻塞文件锁,当我试图获取一个锁时,我有一个类似这样的代码块:

while(!fileLockIsAcquired())
{
    Thread.sleep(100); //is this cool?
    tryAcquireFileLock();
}

100 毫秒的值对我来说似乎过于死板,我想知道如果我使用Thread.sleep(0)Thread.yield(). 在我看来,Yield 似乎可以更好地传达意图,但我不确定我是否完全理解 JVM 是如何解释它的。一种选择明显优于另一种吗?

该文件是通过没有阻塞锁定方法的Web服务访问的远程文件,因此我必须自己实现阻塞。

4

2 回答 2

3

使用 yield 会使您的投票率更高,这可能不是您想要的。这就是为什么我认为您当前的代码是可接受的第一个解决方案。

另一方面,您可以使您的 Web 服务阻塞(推迟它的响应直到获得锁)受到超时的影响。这将是一个更可靠的解决方案,因为一旦获得锁定,您就可以快速做出反应,并且轮询率适中。

于 2013-07-04T13:25:50.387 回答
0

我相信等待是比其他任何东西更好的选择,原因是因为其他线程可以在释放锁时通知。等待的好处是一旦通知它就会立即出来,但睡眠不会。

于 2013-07-04T10:27:45.193 回答