У класі Thread визначено три поля, кілька конструкторів і сукупність методів, призначених для роботи з потоками. Статичні поля використовують для призначення пріоритетів потоків: NORM_PRIORITY, MAX_PRIORITY, MIN_PRIORITY.
Конструктори:
ü Створення нового об’єкту Thread: public Thread();
ü Створення нового об’єкту Thread із зазначенням об’єкта, для якого буде викликатися метод run(): public Thread(Runnable target);
ü Аналогічно до попереднього, але додатково задається ім’я нового об’єкту Thread: public Thread(Runnable target, String name);
ü Створення об’єкта Thread із зазначенням його імені: public Thread(String name);
ü Створення нового об’єкта Thread із зазначенням групи потоку та об’єкта, для якого викликається метод run(): public Thread(ThreadGroup group, Runnable target);
Методи:
ü activeCount() – кількість активних потоків у групі, до якої належить потік;
ü checkAccess() – поточному потоку дозволяється змінювати об’єкт Thread;
ü countStackFrames() – визначення фреймів у стеку;
ü currentThread() – визначення потоку, що працює;
ü destroy() – примусове завершення роботи потоку.
Створення дочірнього класу на базі класу Thread
|
|
Розглянемо спосіб реалізації багато потоковості, заснований на успадкуванні від класу Thread. При використанні цього способу для потоку визначається окремий клас, наприклад, так:
class DrawRectangles extends Thread {
public void run(){…}
…
}
Інтегрована синхронізація потоків
Java містить підтримку багато потоковості як на рівні синтаксису мови, так і на рівні бібліотек і системних викликів.
На рівні самої мови методи, оголошені з ознакою synchronized, гарантовано не будуть виконуватися одночасно для даного об’єкта. Такі методи або блоки виконуються під контролем моніторів, які допомагають переконатися, що дані, доступ до яких здійснюється в цих методах або блоках, залишаються в узгодженому стані.
Кожен об’єкт Java має власний монітор, створення примірника і активація якого виконується Java VM у момент першого використання.