Priorytety wątków - 1

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
void setPriority(int newPriority)
Ustawia nową wartość priorytetu
int getPriority()
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.