Перш ніж приступити до розмови про багатопоточності, слід уточнити деякі терміни.
Зазвичай в будь-який багатопотокової операційній системі виділяють такі об'єкти, як процеси і потоки. Між ними існує велика різниця, яку слід чітко собі уявляти.
Для кожного процесу операційна система створює один головний потік (thread), який є потоком виконуються по черзі команд центрального процесора. При необхідності головний потік може створювати інші потоки, користуючись для цього програмним інтерфейсом операційної системи.
Пріоритети потоків в додатках Java
Якщо процес створив кілька потоків, то всі вони виконуються паралельно, причому час центрального процесора (або декількох центральних процесорів в мультипроцесорних системах) розподіляється між цими потоками.
Розподілом часу центрального процесора займається спеціальний модуль операційної системи - планувальник. Планувальник по черзі передає управління окремим потокам, так що навіть в однопроцессорной системі створюється повна ілюзія паралельної роботи запущених потоків.
Розподіл часу виконується по перериваннях системного таймера. Тому кожному потоку дається певний інтервал часу, протягом якого він перебуває в активному стані.
Зауважимо, що розподіл часу виконується для потоків, а не для процесів. Потоки, створені різними процесами, конкурують між собою за отримання процесорного часу.
Яким саме чином?
Програми Java можуть вказувати три значення для пріоритетів потоків. Це NORM_PRIORITY, MAX_PRIORITY і MIN_PRIORITY.
За замовчуванням знову створений потік має нормальний пріоритет NORM_PRIORITY. Якщо інші потоки в системі мають той же самий пріоритет, то всі потоки користуються процесорним часу на рівних правах.
При необхідності ви можете збільшувати пріоритет окремих потоків, визначивши для них значення пріоритету, відповідно, MAX_PRIORITY або MIN_PRIORITY. Потоки з підвищеним пріоритетом виконуються в першу чергу, а зі зниженим - тільки за відсутності готових до виконання потоків, що мають нормальний або підвищений пріоритет.