在这个java小程序教程代码中,为什么循环中的线程优先级设置为最大?
我正在学习一些基本的游戏java编程 我跟在后面 它们在小程序中运行方法的框架代码:在这个java小程序教程代码中,为什么循环中的线程优先级设置为最大?,java,applet,thread-priority,Java,Applet,Thread Priority,我正在学习一些基本的游戏java编程 我跟在后面 它们在小程序中运行方法的框架代码: public void run () { // lower ThreadPriority Thread.currentThread().setPriority(Thread.MIN_PRIORITY); // run a long while (true) this means in our case "always" while (true) {
public void run ()
{
// lower ThreadPriority
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
// run a long while (true) this means in our case "always"
while (true)
{
// repaint the applet
repaint();
try
{
// Stop thread for 20 milliseconds
Thread.sleep (20);
}
catch (InterruptedException ex)
{
// do nothing
}
// set ThreadPriority to maximum value
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
}
}
在这段代码中,他们最初将线程优先级设置为最小。然后在循环内部,他们将其设置为最大值
我想知道这样做的目的是什么?我不知道为什么他们最初决定将优先级设置为最小。我认为这是毫无意义的 但是,将优先级设置为高于正常值(可能是夸大了最大值)是有意义的 一般来说,如果你有一个线程重复执行一个短动作然后休眠,那么你通常想要的是尝试并最大限度地提高线程在每次迭代中“按时启动,完成任务,然后重新休眠”的概率。一般来说,将线程优先级设置为高于平均值会增加发生这种情况的可能性。在Windows上尤其如此,线程优先级本质上影响线程调度程序决定“下一步运行什么”时调度的线程
你可能想通读我几年前写的一篇文章,这篇文章可能有助于解释其中的一些问题。我觉得这也很奇怪。它在循环之前将其设置为最小优先级,继续执行无限循环,并且在第一次迭代之后将线程优先级设置为最大。对我来说,这似乎是一个奇怪且毫无帮助的教程。是的,提高优先级的实际位置有点奇怪。就其本身而言,在进入循环之前提高优先级(而不是降低优先级)是有意义的——请参见下面的答案。但是他们设置位置的特殊位置背后的原理,以及最初设置为最小值的原理,并不是很明显。我认为这只是一个非常基本的小程序框架,用于以后变得更复杂的游戏。我已经试过一些java游戏的教程,但是它们要么偷偷地把各种各样的东西塞进了无法解释的东西里,要么反过来把所有东西一下子扔给你。我决定我应该尽我最大的努力把它们都检查一遍。我应该说——这个例子中优先级设置的特殊位置仍然有点奇怪。一般来说,在进入循环之前,您可以将优先级设置为高,并将其保持为高优先级。我想我明白了。因为它进入睡眠状态,它给了其他人一个做自己事情的机会,但当它醒来并运行时,它希望确保它能按时完成自己的事情。对吗?