Diskuze: Thread metoda yield
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 6 zpráv z 6.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj, díky preemptivnímu přepínání vláken (každých X ms se může vlákno přerušit, aby pokračovalo zase jiné), se může vlákno změnit i bez zavolání Yield. Navíc nemáš zaručeno, že se budou provádět v takovém pořadí, v jakém chceš. Pokud chceš vypisovat čísla postupně, tak musíš použít nějakou zesynchronizovanou datovou stukturu, kam dáš čísla a vlákna si je budou postupně brát a vypisovat.
Jo moc děkuju za vysvětlení Asi to bude tím ale radši sem ještě pošlu příklad
třída na vytvoření vlákna:
public class FirstThread extends Thread {
public FirstThread(String name) {
super(name);
}
@Override
public void run() {
for(int i = 0; i<50; i++) {
System.out.println(getName()+": "+i);
yield();
}
}
}
Třída s metodou main
public static void main(String[] args) {
FirstThread f1 = new FirstThread("1. Vlákno");
FirstThread f2 = new FirstThread("2. Vlákno");
f1.start();
f2.start();
}
Podle dokumentace:
public static void yield()
A hint to the scheduler that the current thread is willing to yield its current use of a processor. The scheduler is free to ignore this hint.
Přepnutí vláken není tak "levná" operace pro procesor, takže se občas vyplatí nechat vlákno dále běžet, jelikož přepínání vláken při každé příležitosti by ty programy akorát hrozně zpomalovalo.
Zobrazeno 6 zpráv z 6.