线程优先级是否会提高Thread.sleep(50);
的准确性?
正如我们所知,当您将睡眠调用50毫秒时,线程不准确,但是它是否会提高准确度?如果线程列为MAX_PRIORITY
。
感谢任何解释。
答案 0 :(得分:5)
睡眠的准确性取决于操作系统。如果您想要更高的准确度,可以使用其他操作系统另一种方法是不要睡觉,你可以忙着等。或者你可以睡45秒,然后忙等5毫秒。
如果你有一项需要每秒运行20次的任务,你最好跟踪下一次运行任务的时间并在当时运行它(而不是等待一段固定的时间)。睡觉之间也需要一些时间。
BTW这是ScheduledExecutorService.scheduleAtFixedRate为你做的事。
它可以在具有微秒精度的任务之间休眠(假设操作系统支持它),但它不会漂移。
答案 1 :(得分:0)
我无法想象会出现这种情况。但线程优先级的影响取决于主机操作系统。
答案 2 :(得分:0)
它与线程精度没有直接关系,但是因为你在50毫秒的休眠之后给出了MAX优先级,JVM将选择任何以相同MAX优先级处理的线程。
答案 3 :(得分:0)
是的,可以使其更准确。
然而,来自Java Concurrency In Practice,Brian goetz:
线程优先级机制是一种钝器,并不总是明显改变优先级会产生什么影响;提升线程的优先级可能什么都不做,或者可能总是导致一个线程优先于另一个线程进行调度,导致饥饿。
通常明智的做法是抵制调整线程优先级的诱惑。一旦开始修改优先级,应用程序的行为就会变得特定于平台,并且会引入饥饿风险。您可以经常发现一个程序试图通过奇数位置
Thread.sleep
或Thread.yield
调用的优先级调整或其他响应问题来恢复,以便为更低优先级的线程提供更多时间
因此,如果确实需要您的Thread.sleep(50)
准确无误,请避免更改主题优先级并重新考虑您的设计!