/ / Czy Java jest zapobiegawcza? - Java, wielowątkowość, priorytet wątku, zapobiegawczy

Czy Java jest prewencyjna? - Java, wielowątkowość, priorytet wątku, zapobiegawcze

Widziałem wiele odpowiedzi na to pytanie, ale wciąż nie jestem pewien.

Jednym z nich było „Java jest wyprzedzająca”. (JVM planuje przy użyciu wyprzedzającego algorytmu szeregowania opartego na priorytetach (zwykle algorytmu Round Robin).

Po drugie, jeśli 2 wątki z tym samym priorytetowym uruchomieniem Java nie zapobiegnie i jeden wątek może umrzeć z głodu.

Więc teraz napisałem program, żeby to sprawdzićutworzył 10 wątków o minimalnym priorytecie następnie 10 wątków o najwyższym priorytecie, wyniki były takie, że przeskakiwałem między wszystkimi wątkami - co oznacza, że ​​Java jest wyprzedzająca nawet jeśli 2 wątki mają ten sam priorytet

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

}

Odpowiedzi:

9 dla odpowiedzi № 1

Nie sądzę, aby zostało to określone tak dokładnie, jak sugerowałby jeden z dwóch cytatów. Wszystko, co mogłem znaleźć był:

Każdy wątek ma priorytet. Wątki o wyższym priorytecie są wykonywane zamiast wątków o niższym priorytecie. Gdy kod działający w jakimś wątku tworzy nowy obiekt Thread, nowy wątek ma początkowo ustawiony priorytet równy priorytetowi tworzącego wątku.

Poza tym uważam, że mechanika jest specyficzna dla platformy i JVM. Na platformach, które znam, JVM korzysta z wątków systemu operacyjnego, a zatem korzysta z harmonogramu systemu operacyjnego.

To powiedziawszy, biorąc pod uwagę, że wszystkie wątki aplikacji mają domyślnie ten sam priorytet, byłoby niezwykle niewygodne, gdyby wątki te nie były w stanie wzajemnie się wyprzedzać.