在这个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) {

我正在学习一些基本的游戏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) 
    {
        // 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游戏的教程,但是它们要么偷偷地把各种各样的东西塞进了无法解释的东西里,要么反过来把所有东西一下子扔给你。我决定我应该尽我最大的努力把它们都检查一遍。我应该说——这个例子中优先级设置的特殊位置仍然有点奇怪。一般来说,在进入循环之前,您可以将优先级设置为高,并将其保持为高优先级。我想我明白了。因为它进入睡眠状态,它给了其他人一个做自己事情的机会,但当它醒来并运行时,它希望确保它能按时完成自己的事情。对吗?