线程优先级和线程准确性

线程优先级是否会提高Thread.sleep(50);准确性Thread.sleep(50);

我们知道当你打电话给睡眠50毫秒时,线程不准确,但它是否会提高准确度? 如果线程列为MAX_PRIORITY

将会感谢任何解释。

睡眠的准确性取决于操作系统。 如果您想要更高的准确性,可以使用其他操作系统 另一种方法是不要睡觉,你可以忙着等。 或者你可以睡45秒,然后忙等5毫秒。

如果你有一个你需要每秒运行20次的任务,你最好跟踪下一次运行任务的时间并且当时运行它(而不是等待一段固定的时间)就像你在睡眠之间做的那样还需要一些时间。

BTW这就是ScheduledExecutorService.scheduleAtFixedRate为您所做的事情。

它可以在具有微秒精度的任务之间hibernate(假设OS支持它)但它试图不漂移。

我无法想象会出现这种情况。 但线程优先级的影响取决于主机操作系统。

它与线程精度没有直接关系,但是因为你在50毫秒的hibernate之后给出了MAX优先级,JVM将选择任何以相同MAX优先级处理的线程。

是的,它可以使它更准确。

然而,来自Java Concet In Practice ,Brian goetz:

线程优先级机制是一种钝器,并不总是很明显改变优先级会产生什么影响; 提升线程的优先级可能什么都不做,或者可能总是导致一个线程优先于另一个线程被调度,导致饥饿。

通常明智的做法是抵制调整线程优先级的诱惑。 一旦开始修改优先级,应用程序的行为就会变得特定于平台,并且会引入饥饿的风险。 您可以经常发现一个程序试图通过在奇数位置存在Thread.sleepThread.yield调用来从优先级调整或其他响应性问题中恢复,以尝试为较低优先级的线程提供更多时间。

因此,如果您确实需要Thread.sleep(50)准确,请避免更改线程优先级并重新考虑您的设计!