ПредишенСледващото

Приоритети потоци, използвани конци разписание да се реши, когато всеки от потоците ще бъде разрешено да работят. Теоретично, с висок приоритет потоци са по-процесорно време от по-нисък приоритет. На практика размерът на CPU време, което приема поток, често зависи от няколко фактора, в допълнение към своя приоритет. (Например, как операционната система изпълнява многозадачност, това може да повлияе на относителната наличието на процесорно време). Висок приоритет поток може също да изпревари с нисък приоритет. Например, когато нисък приоритет на нишка минава, с висок приоритет ще продължи прекъсната работа (прекъсване или прекратяване на очакване IO работа), последният освобождава нисък приоритет конец.

Теоретично текат трябва да се даде равен приоритет равен достъп до процесора. Но вие трябва да бъдете внимателни. Не забравяйте, че Java е проектиран да работи в широк диапазон от среди. Някои от тези среди прилагане мултитаскинг коренно различен от другите. За безопасността тече които споделят същия приоритет трябва да се даде контрол еднакво. Това гарантира, че всички теми, ще могат да се извършват в операционните системи, без изпреварваща многозадачност. На практика, дори и в среди с не-превантивен многозадачност повечето теми все още имат шанс да работи, тъй като повечето теми неизбежно се сблъскват с блокиращи ситуации, като например в очакване на IO. Когато това се случи, блокираната нишката е спряно и други теми, могат да работят. Но ако искате да се постигне плавен многонишковите работа, не трябва да се разчита на него. В допълнение, някои видове проблеми за интензивно процесора. Тези потоци улавяне процесор. Потоци от този тип, които трябва да се прехвърлят контрола от време на време, за да се даде шанс да изпълни друго.

За задаване на приоритета на метода на използване setPriority (), която е член на класа Thread. Така изглежда, че цялостната форма:

крайния невалидни setPriority (ниво вътр)

Ето едно ново ниво определя нивото на приоритет на нишката на разговори. Статистическото ниво трябва да бъде в границите на до MIN_PRIORITY MAX_PRIORITY. В момента тези стойности са съответно 1 и 10. За да се върнете на потока на приоритета по подразбиране, изберете NORM_PRlORITY, който сега е равно на 5. Тези приоритети са определени като статични окончателните (статични окончателен) променливи класове нишка.

Можете да получите текущата стойност на приоритет нишка, наричайки метода на класа Thread getPriority (), както е показано по-долу:

окончателен Int getPriority ()

Следният пример показва два потока с различни приоритети, които работят на платформата без изпреварваща многозадачност-различно, отколкото на платформата, за да заяви многозадачност. Една нишка получава приоритет на две нива по-високи от нормалното, както е дефинирано Thread.NORM_PRIORITY, а другият - на две нива под нормата. Потоци започват и готова за работа за 10 секунди. Всяка нишка изпълнява линия за преброяване на броя на повторения. След 10 секунди, основната нишка спира двата потока. След това, се показва броят на бримкови повторения, който може да изпълнява всяка нишка.

// Демонстрация на приоритети конец.
клас профилни изпълнява Изпълнима дълго кликване = 0;
Темата т;
частен летлив Булева бягане = вярно;
публичен профилни (междинно съединение п) т = нова Тема (това);
t.setPriority (р);
>
обществени нищожен план (), докато (бягане) кликнете ++;
>
>
обществени невалидни спирка () тичане = неверни;
>
обществени невалидни старт () т. започнете ();
>
>
клас HiLoPri публично статично невалидни основни (String опцията []) Thread.currentThread ();
setPriority (Thread.MAX_PRIORITY);
профилни Hi = нови профилни (Thread.NORM_PRIORITY + 2);
профилни ето = нови профилни (Thread.NORM_PRIORITY - 2);
lo.start ();
hi.start ();
опитайте Thread.sleep (10000);
>
улов (InterruptedException д) System.out.println ( "основният поток е прекъснат.");
>
lo.stop ();
hi.stop ();
// Изчакайте 10 секунди, преди прекъсването.
опитайте hi.t.join ();
lo.t.join ();
>
улов (InterruptedException д) System.out.println ( "Хванати изключение InterruptedException");
>
System.out.println ( "нисък приоритет поток е:" + lo.click);
System.out.println ( "висок приоритет тема:" + hi.click);
>
>

Изходът от тази програма при стартиране под Windows показва, че ключът на потоци контекст, въпреки че не е имало принуден улавяне процесор и не блокира IO. Висока приоритет конец имам повечето от времето на процесора.

С нисък приоритет тема: 4408112
Висока приоритет тема: 589626904

Разбира се, точната мощност, генерирана от тази програма, ще зависи от скоростта на вашия процесор, а броят на задачи, изпълнявани в системата. Когато една и съща програма се провежда в среда с не-превантивен многозадачност, получаваме различен резултат.

Друга забележка за предишната програма. Имайте предвид, че променливата протичане се предшества от думата летлив. Въпреки летлив обяснено по-подробно в глава 13, тя се използва тук, за да се гарантира, че стойността на управлението трябва да бъдат проверени за всяка итерация стъпка:

Без летлив Java има способността да се оптимизира цикъла, така че ще бъде създаден локалното копие на управлението. Използването на летлив предотвратява тази оптимизация, казва Java, което косвено работи за код може да бъде променен правилно.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!