Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпори JAVA.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
178.34 Кб
Скачать

56.Базові класи для роботи з потоками

Потік виконання в Java представляється екземпляром класу Thread. Для того , щоб

написати свій потік виконання необхідно успадковуватися від цього класу і

перевизначити метод run ( ) . Наприклад , public class MyThread extends Thread {

  public void run ( ) {/ / деякий довгий дію , обчислення

   long sum = 0 ;

   for ( int i = 0 ; i < 1000 ; i + +) { sum + = i ;} System.out.println ( sum ) ;} }

Метод run ( ) містить дії , які повинні виконаються в новому потоці виконання.

Щоб запустити його , необхідно створити екземпляр класу - спадкоємця , і викликати

успадкований метод start ( ) , який повідомляє віртуальній машині , що необхідно

запустити новий потік виконання і почати в ньому виконувати метод run ( ) .

MyThread t = new MyThread (); t.start (); результаті чого на консолі з'явиться результат: 499500 Коли метод run ( ) завершено ( зокрема , зустрілося вираз return ) потік виконання зупиняється. Проте, ніщо не перешкоджає запису нескінченного циклу в цьому методі .

3.2 . інтерфейс Runnable

Описаний підхід володіє одним недоліком. Оскільки в Java відсутня

множинне спадкування , вимога успадковуватися від Thread може привести до конфлікту. Якщо ще раз подивитися на наведений вище приклад , то стане зрозуміле , що спадкування вироблялося тільки з метою перевизначення методу run ( ) . Тому пропонується більш простий спосіб створити свій потік виконання. Досить реалізувати інтерфейс Runnable , в якому оголошено тільки один метод - вже знайомий void run ( ) . Запишемо приклад, наведений вище , за допомогою цього інтерфейсу:

public class MyRunnable implements Runnable {

  public void run () {

   / / Деякий довгий дію , обчислення

   long sum = 0 ;

   for ( int i = 0 ; i < 1000 ; i + +) {

    sum + = i ;

   }

   System.out.println ( sum ) ;  }}

Також незначно змінюється процедура запуску потоку : Runnable r = new MyRunnable (); Thread t = new Thread ( r ) ; t.start (); Якщо раніше об'єкт, що представляє сам потік виконання , і об'єкт з методом run ( ) , що містить корисну функціональність , були об'єднані в одному екземплярі класу MyThread , то тепер вони розділені. Який з двох підходів зручніше , можна свободо вирішувати в кожному конкретному випадку.

Підкреслимо , що Runnable не є повною заміною класу Thread , оскільки створення запуск самого потоку виконання можливо тільки через метод Thread.start ( ) .

3.3 . Робота з пріоритетами

Розглянемо , як в Java потокам можна призначати пріоритети. Для цього в класі Thread

існують методи getPriority ( ) і setPriority ( ) , а також оголошені три константи:

Інтерфейс Runnable Стор. 5 з 24

Програмування на Java

Rendered by www.RenderX.com

MIN_PRIORITY

MAX_PRIORITY

NORM_PRIORITY

З назви очевидно, що їх значення описують мінімальне , максимально і

нормальне ( за замовчуванням ) значення пріоритету.

3.4 . Демон - потоки

Демон - потоки дозволяють описувати фонові процеси , які потрібні тільки для

обслуговування основних потоків виконання і не можуть існувати без них. для роботи

з цією властивістю існують методи setDaemon ( ) і isDaemon ( ) .

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]