Приоритеты потоков исполнения в Java

Приоритеты потоков исполнения в JavaПланировщик потоков использует приоритеты потоков исполнения, чтобы принять решение, когда разрешить исполнение каждому потоку. Теоретически вы­сокоприоритетные потоки исполнения получают больше времени ЦП, чем низко­приоритетные.

А на практике количество времени ЦП, которое получает потоки сполнения, нередко зависит не только от его приоритета, но и от ряда других факторов. ( Например, особенности реализации многозадачности в операционной системе могут оказывать влияние на относительную доступность времени ЦП. ).

Высокоприоритетный поток исполнения может также вытеснять низкоприори­тетный. Например, когда низкоприоритетный поток исполняется, а высокопри­оритетный собирается возобновить свое исполнение, прерванное в связи с при­остановкой или ожиданием завершения операции ввода-вывода, то он вытесняет низкоприоритетный поток.

Теоретически потоки исполнения с одинаковым приоритетом должны получать равный доступ к ЦП. Но не следует забывать, что язык Jаvа предназначен для при­менения в обширном ряде сред.

В одних из этих сред многозадачность реализуется совершенно иначе, чем в других. В целях безопасности потоки исполнения с оди­наковым приоритетом должны получать управление лишь время от времени. Этим гарантируется, что все потоки получат возможность выполняться в среде операци­онной системы с невытесняющей многозадачностью.

Но на практике даже в средах с невытесняющей многозадачностью большинство потоков все-таки имеют шанс для исполнения, поскольку во всех потоках неизбежно возникают ситуации блоки­ровки, например, в связи с ожиданием ввода-вывода.

Когда случается нечто подобное, исполнение заблокированного потока приостанавливается, а остальные пото­ки могут исполняться. Но если требуется добиться плавной работы многопоточной программы, то полагаться на случай лучше не стоит.

К тому же в некоторых видах задач весьма интенсивно используется ЦП. Потоки, исполняющие такие задачи, стремятся захватить ЦП, поэтому передавать им управление следует изредка, чтобы дать возможность выполняться другим потокам.

Чтобы установить приоритет потока исполнения, следует вызвать метод set­Priority() из класса Thread. Его общая форма выглядит следующим образом:

где аргумент уровень обозначает новый уровень приоритета для вызывающего потока исполнения.

Значение аргумента уровень должно быть в пределах от MIN_PRIORITY до МAX_PRIORITY.

Программирование на многопоточном уровне не так уж и сложное дело если делать все это под хорошей музыкой. Далее по ссылке вы сможете найти хорошие наушники Monster Beats по доступным ценам. У самого такие имеются уже год, программировать с ними одно удовольствие.

В настоящее время эти значения равны соответственно 1 и 10. Чтобы возвратить потоку исполнения приоритет по умолчанию, следует указать значение NORМ_PRIORIТУ, которое в настоящее время равно 5.

Эти приоритеты определены в классе Thread как статические завершенные ( statiс final ) переменные. Для того чтобы получить текущее значение приоритета потока исполнения, до­статочно вызвать метод getPriority() из класса Thread, как показано ниже.

Разные реализации Jаvа моrуг вести себя совершенно иначе в отношении планирования потоков исполнения. Большинство несоответствий возникает при наличии потоков исполнения, опирающихся на вытесняющую многозадачность вместо совместного использования времени ЦП.

Наиболее безопасный способ по­лучить предсказуемое межплатформенное поведение многопоточных программна Java состоит в том , чтобы использовать потоки исполнения, которые добро­вольно уступают управление ЦП.

Интересное видео по теме: