この質問に対する多くの回答を見てきましたが、まだわかりません。
それらの1つは「Javaはプリエンプティブです」でした。(JVM は、プリエンプティブな優先度ベースのスケジューリング アルゴリズム (通常はラウンド ロビン アルゴリズム) を使用してスケジュールを設定します。
2 つ目は、同じ優先度の 2 つのスレッドが Java を実行すると、プリエンプトされず、1 つのスレッドが枯渇する可能性があることです。
だから今、私はそれをチェックするためのプログラムを書きました.10個の最小優先度のスレッドを作成し、次に最大優先度の10個のスレッドを作成しました。その結果、すべてのスレッド間でジャンプしました.優先順位
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaapplication1;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @
*/
public class JavaApplication1 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
for (int i=0;i<10;i++){
Thread t=new Thread(new Dog(i));
t.setPriority(Thread.MIN_PRIORITY);
t.start();
}
try {
Thread.sleep(5000);
} catch (InterruptedException ex) {
Logger.getLogger(JavaApplication1.class.getName()).log(Level.SEVERE, null, ex);
}
for (int i = 0; i < 10; i++) {
Thread g = new Thread(new Dog(i+10));
g.setPriority(Thread.MAX_PRIORITY);
g.start();
}
}
}
t
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaapplication1;
/**
*
* @author Matan2t
*/
public class Dog implements Runnable{
public int _x=-1;
public Dog(int x){
_x=x;
}
@Override
public void run(){
while(true){
System.out.println("My Priority Is : " + _x);
}
}
}