
Kontynuujmy naszą lekcję. Czym są priorytety wątków i dlaczego są potrzebne.
W rzeczywistych problemach znaczenie pracy różnych wątków może się znacznie różnić. Aby kontrolować ten proces, wymyślono priorytet pracy. Każdy wątek ma taki priorytet - jest to liczba od 1 do 10.
10 ma najwyższy priorytet.
1 jest najniższy.
Jeśli priorytet nie jest ustawiony, wątek otrzymuje priorytet 5 - średni.
Priorytet wątku nie wpływa znacząco na jego działanie, ma raczej charakter doradczy. Jeśli do uruchomienia jest wiele uśpionych wątków, maszyna Java najpierw uruchomi wątek o wyższym priorytecie.
Maszyna Java zarządza wątkami według własnego uznania. Wątki o niskim priorytecie nie będą bezczynne. Po prostu dostaną mniej czasu niż inni, ale i tak zostaną straceni.
W większości przypadków wątki zawsze działają z tym samym priorytetem. Próba przyznania jednemu wątkowi więcej czasu niż innym często wskazuje na błąd architektoniczny w programie.
- Wow. A ja już marzyłam, że teraz nadam temu wątkowi najwyższy priorytet, a zrobi to 10 razy więcej.
- I tutaj okazuje się, że sytuacja jest bliska sfinalizowania: wątek o wysokim priorytecie może i będzie działał więcej, a może nie - nikt nie daje gwarancji.
Przy okazji, jak mogę zmienić priorytet wątku?
- To jest bardzo proste. Klasa Thread ma dwie metody:
metoda | Opis |
---|---|
|
Ustawia nową wartość priorytetu |
|
Zwraca bieżący priorytet wątku |
Klasa Thread ma również trzy stałe:
public final static int MIN_PRIORITY = 1;
public final static int NORM_PRIORITY = 5;
public final static int MAX_PRIORITY = 10;
Niech zgadnę. MIN_PRIORITY to minimalny priorytet, MAX_PRIORITY to maksymalny, a NORM_PRIORITY to domyślny priorytet?
- Tak, dokładnie. Możesz napisać własny kod, który ustawia wątki na najwyższy priorytet.
– Czy jest tu jakaś sztuczka? Wygląda na to, że:
Thread thread = new MyThread();
thread.setPriority(Thread. MAX_PRIORITY)
thread.start();
- Zgadza się. Nic skomplikowanego prawda?
- Tak. Czy można ustawić/zmienić priorytet wątku po jego uruchomieniu? A może jest tak jak z setDaemonem - czy konieczne jest ustawienie wartości przed rozpoczęciem wątku?
- Priorytet można zmienić po starcie. Jak powiedziałem, nie pociąga to za sobą kardynalnych zmian.
— Mały, ale ciekawy temat. Dzięki Ellie.
GO TO FULL VERSION