Ahojte hrál jsem si s prioritami vláken a nefunguje to správně. Můj zdroj si myslím, že mám tak jednoduchý že v něm chyba není. Podle mě je špatně naprogramována Java. Kód jsem si naprogramoval v takové logice kdy vlakna s určitou prioritou by měla proběhnout a nikoliv se uprostřed po instrukcích přepínat. ( žádnou metodu yield() v kódu nemám) . Přesto výpis
class Vlakna11 extends Thread {
private String s;
protected Vlakna11(String s,int priorita) {
super(s);
System.out.println("Konstruktor od vlakna\t"+s);
this.setPriority(priorita);
this.s=s; }
public void run() {
System.out.println(Thread.currentThread()+"\t"+s);
int [] pole = new int [10000000];
for(int i=0;i<pole.length;i++){
pole[i]=i+i+i+i+i+i+i+i+i+i+i+i; }
System.out.println("Zde je vysledna hodnota :"+pole[9999999]+"\t vlakno :\t"+s); }
}
public class Q_15VlaknaPriorita {
public static void main(String [] args) {
System.out.println("Zacatek programu");
Vlakna11 vlakno1 = new Vlakna11("vlakno1",4);
Vlakna11 vlakno2 = new Vlakna11("vlakno2",6);
Vlakna11 vlakno3 = new Vlakna11("vlakno3",8);
Vlakna11 vlakno4 = new Vlakna11("vlakno4",10);
Vlakna11 vlakno5 = new Vlakna11("vlakno5",5);
Vlakna11 vlakno6 = new Vlakna11("vlakno6",6);
vlakno6.start();vlakno5.start();vlakno4.start();
System.out.println("Testovaci vypis 1");
vlakno3.start();vlakno2.start();vlakno1.start();
System.out.println("Testovaci vypis 2");
try {
vlakno1.join();vlakno2.join();
vlakno3.join();vlakno4.join();
vlakno5.join();vlakno6.join();}
catch (InterruptedException e) {
e.printStackTrace(); }
System.out.println("Konec programu"); }
}
Kromě toho že se výpis mění jak kdy, podle naprosto neznámé logiky, je to skutečně fascinující. Přikládám i výpis. Podle mě by celé vlákno mělo projet komplet a nikoliv se přepínat a to samozřejmě i včetně výpisu.
Zacatek programu
Konstruktor od vlakna vlakno1
Konstruktor od vlakna vlakno2
Konstruktor od vlakna vlakno3
Konstruktor od vlakna vlakno4
Konstruktor od vlakna vlakno5
Konstruktor od vlakna vlakno6
Thread[vlakno6,6,main] vlakno6
Testovaci vypis 1
Thread[vlakno3,8,main] vlakno3
Thread[vlakno4,10,main] vlakno4
Thread[vlakno2,6,main] vlakno2
Testovaci vypis 2
Thread[vlakno5,5,main] vlakno5
Zde je vysledna hodnota :119999988 vlakno : vlakno6
Zde je vysledna hodnota :119999988 vlakno : vlakno4
Zde je vysledna hodnota :119999988 vlakno : vlakno3
Thread[vlakno1,4,main] vlakno1
Zde je vysledna hodnota :119999988 vlakno : vlakno2
Zde je vysledna hodnota :119999988 vlakno : vlakno5
Zde je vysledna hodnota :119999988 vlakno : vlakno1
Konec programu