java-優先順位を設定することによるスレッド実行順序

以下の順序でスレッドの優先度を設定しました

A、B、C。ただし、プログラムの下で実行しているとき、Aの前にBが実行されることがあります。
Bの優先度をAの優先度よりも低く設定しているため、この実行がわかりません。

public class AThread implements Runnable{
    public void run(){
    System.out.println("In thread A");
   }}

  public class BThread implements Runnable {
      public void run(){
    System.out.println("In thread B");  
    } 
   }

 public class CThread implements Runnable {

 public void run(){

    System.out.println("In thread C");

 }

}


 public class ThreadPriorityDemo {

   public static void main(String args[]){

    AThread A = new AThread();
    Thread tA = new Thread(A);


    BThread B = new BThread();
    Thread tB = new Thread(B);

    CThread C = new CThread();
    Thread tC = new Thread(C);

    tA.setPriority(Thread.MAX_PRIORITY);
    tC.setPriority(Thread.MIN_PRIORITY);
    tB.setPriority(tA.getPriority() -1);


    System.out.println("A started");
    tA.start();

    System.out.println("B started");
    tB.start();

    System.out.println("C started");
    tC.start();

}       

}

ベストアンサー
スレッドの優先順位は、おそらくあなたが思っているものではありません。

スレッドの優先順位は、これら2つのスレッドが関係するスケジューリングまたはCPU割り当ての決定ポイントで、あるスレッドを別のスレッドよりも優先するようオペレーティングシステムに推奨するものです。ただし、これがどのように実装されるかは、オペレーティングシステムとJVM実装によって異なります。

JavaMexには、スレッドの優先順位に関する素晴らしい議論があります。要点は次のとおりです。

>優先順位はまったく効果がありません。
>優先順位は、スケジューリングを決定する計算の一部にすぎません。
>個別のJava優先度値は、実際には同じ値に変換される場合があります(たとえば、優先度10と優先度9は同じ場合があります)。
> Javaは基盤となるOSのスレッド化メカニズムを使用しているため、各OSは優先順位をどうするかを独自に決定します。

その後の次の記事を必ず読んでください。LinuxとWindowsでどのように実行されるかを示しています。

問題は上記の3番目の点(Windowsで実行している場合)に起因する可能性があると思いますが、それは他の理由のいずれかかもしれません。

転載記事の出典を記入してください: java-優先順位を設定することによるスレッド実行順序 - コードログ