0

ゲーム用の基本的なJavaプログラミングを学ぼうとしています。

このチュートリアル hereに従っています。

アプレットの run メソッドのスケルトン コードは次のとおりです。

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); 
    }
}

このコードでは、最初にスレッドの優先度を最小に設定しています。次に、ループ内で最大に設定します。

これの目的は何だろう?と思いました。

4

1 に答える 1

2

最初に優先度を最小に設定することにした理由はわかりません。これは無意味だと思います。

ただし、優先順位を通常よりも高く設定する (最大値は誇張されている可能性があります) ことには意味があります。

一般に、短いアクションを繰り返し実行してからスリープするスレッドがある場合、一般的に必要なのは、各反復でスレッドが「時間通りに開始し、そのことを行い、その後スリープに戻る」確率を最大化することです。 . 大まかに言えば、スレッドの優先度を平均よりも高く設定すると、この問題が発生する可能性が高くなります。これは特に Windows で当てはまります。Windows では、スレッド スケジューラが「次に実行するもの」を決定する時点で、スレッドの優先度が基本的にどのスレッドにスケジュールされるかに影響します。

関連する問題のいくつかを説明するのに役立つかもしれない、 Java スレッドの優先順位について数年前に書いた記事を読みたいと思うかもしれません。

于 2012-05-05T17:31:43.583 に答える