java - Java中轮询时的Thread.sleep或yield

标签 java concurrency polling

我正在 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/

相关文章:

java - 使用 ASM : ClassCastException 实现接口(interface)

java - 捕获 Hibernate 异常

java - Eclipse-Tomcat 设置中的错误 - ClassNotFoundException "1catalina.org.apache.juli.FileHandler"

database - 在 Postgres 中将数据从一个表移动到另一个表的最快方法

Java等待并通知: IllegalMonitorStateException

c# - MemoryCache - 防止项目过期

java - 使用java将数据索引到弹性时出错

java - 当我将 Collection<Foo> 传递到一个单独的类时,我应该锁定什么对象?

java - 在 Java 中轮询 Web 服务

Java 使用 CountDownLatch 轮询方法直到成功响应