我正在 Java 中实现阻塞文件锁,当尝试获取锁时,我有一个如下所示的代码块:
while(!fileLockIsAcquired())
{
Thread.sleep(100); //is this cool?
tryAcquireFileLock();
}
100 毫秒的值对我来说似乎过于严格,我想知道如果我使用 Thread.sleep(0)
调度程序是否不会更智能或Thread.yield()
。在我看来,Yield 可以更好地传达意图,但我不确定我是否完全理解 JVM 是如何解释它的。一种选择明显优于另一种吗?
该文件是通过Web服务访问的远程文件,没有阻塞锁定方法,因此我必须自己实现阻塞。
最佳答案
使用 yield 将使您的轮询率更高,这可能不是您想要的。这就是为什么我认为您当前的代码是可接受的第一个解决方案。
另一方面,您可以使 Web 服务 block (推迟其响应直到获取锁)受到超时限制。这将是一个更可靠的解决方案,因为一旦获得锁定,您就可以快速使用react,并且轮询率适中。
关于java - Java中轮询时的Thread.sleep或yield,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17467851/