Сон і очікування - це два методи, які використовуються для багатопотокової читання на Java. Метод сну належить до класу Thread, тоді як метод очікування - з класу Object. The ключова різниця між сном і очікуванням на Java - це те, що сон використовується для призупинення виконання поточного потоку на вказану кількість мілісекунд, тоді як метод очікування використовується для того, щоб поточний потік чекав, поки інший потік викликає метод сповіщення або notifyAll для об'єкта.
Нитка - це найменша одиниця обробки в операційній системі. Це єдиний послідовний потік управління в межах програми. Нитки легкі. Багатопоточність - це механізм запуску декількох потоків одночасно. Мови програмування, такі як Java, підтримують багатопотоковість. Багатопотокове читання має переваги, оскільки дозволяє запускати декілька потоків одночасно, і потоки не залежать один від одного. На Java є методи, які можна використовувати для багатопотокової читання. Двоє з них сплять і чекають.
1. Огляд та ключові відмінності
2. Що таке сон на Яві
3. Що чекає в Java
4. Подібність між сном і очікуванням на Java
5. Порівняльне порівняння - сон у режимі сплячого на Яві в таблиці
6. Підсумок
В операційній системі працює кілька процесів. Процес - це програма у виконанні. Кожен процес може мати декілька потоків, і між цими потоками відбувається переключення контексту. У Java є два способи створення потоку. Це - розширення класу потоку або реалізація інтерфейсу Runnable. Клас "Нитка" має конструктори та методи створення та виконання операцій над потоком. Клас Thread розширює клас Object та реалізує інтерфейс Runnable. Інтерфейс Runnable повинен бути реалізований будь-яким класом, екземпляри якого призначені для виконання потоком. Коли потік виконується, код, який слід виконати, записується всередині методу run. Нитка, яка повинна запускатися, вибирається планувальником потоків. В одному процесі працює лише одна нитка.
Нитка проходить через кілька фаз. Після створення об’єкта класу Thread програміст може викликати метод запуску. Перед тим, як викликати цей метод, кажуть, що нитка знаходиться у новому стані. Планувальник потоків вибирає потік для запуску. Якщо потік ще не обраний планувальником потоків, але якщо викликано метод запуску, то потік знаходиться у стані запуску. Після того як планувальник потоків вибере потік для виконання, він переходить у стан роботи. Якщо потік є живим, але наразі не підходить для запуску, він знаходиться в не запущеному або заблокованому стані. Після завершення методу запуску потік переходить до стану, що припиняється. Це основні фази життєвого циклу нитки.
У класі потоку доступні різні методи для виконання різних завдань. Метод сну використовується для сну методу протягом певного часу. Синтаксис методу сну - це публічний недійсний сон (довгі мілісекунди), який викидає InterruptedException. Це змушує поточний виконуваний потік зупиняти виконання тимчасово на певну кількість мілісекунд. Якщо інший потік перериває поточний потік, перерваний стан поточної нитки очищається при скиданні цього винятку.
Рисунок 01: Програма Java з методом сну
Згідно з вищевказаною програмою, метод запуску містить код, який слід виконати. У головній програмі створюються два об'єкти ExampleThread1, і на них викликаються методи запуску. Це дозволить запустити код всередині методу run. Одночасно виконується лише одна нитка. З Ниткою. сон (1000); дозволить першому потоку закінчити виконання протягом 1000 мілісекунд. Коли нитка спить, планувальник ниток підхоплює іншу нитку.
Кілька потоків можуть отримати доступ до спільного ресурсу. Це може призвести до отримання неправильного виводу. Синхронізацію потоків можна використовувати для створення лише однієї нитки для доступу до спільного ресурсу. Припустимо ситуацію наступним чином. Якщо є два потоки, як t1 і t2, t1 починає зберігати значення в текстовому файлі під назвою Text1.txt. Ці значення будуть використані для деякого іншого обчислення, коли повернеться t1. Якщо t2 запускається до повернення t1, t2 може змінити значення, збережені t1. Це може спричинити неправильний вихід t1. За допомогою синхронізації, коли t1 починає використовувати файл Text1.txt, цей файл може бути заблокований, тому він доступний лише t1. T2 не може змінити його, поки t1 не відпустить блокування для доступу до цього текстового файлу. Коли завдання виконано, t1 може звільнити замок. Замок також відомий як монітор.
Синхронізація ниток може бути досягнута за допомогою міжпотокового зв'язку. Критичний розділ - це сегмент коду, який отримує доступ до спільних ресурсів. У взаємозв'язку між потоками нитка призупиняється, виконуючись у своєму критичному розділі, і інший потік дозволено вводити в той же критичний розділ, який буде виконуватися. Він реалізований за допомогою методів очікування, сповіщення та notifyAll. Вони належать до класу Object. Метод очікування використовується, щоб дозволити поточному потоку звільнити замок і чекати, поки інший потік викликає метод сповіщення або notifyAll для об'єкта. Метод сповіщення використовується для пробудження єдиного потоку, який чекає блокування. У notifyAll прокидається всі потоки, які чекають на замок.
Малюнок 02: Клас калькуляторів
Малюнок 03: Основний метод
Клас Калькулятор розширює нитку. Синхронізований блок знаходиться всередині методу запуску. Метод for циклу і повідомлень знаходиться всередині синхронізованого блоку. Всередині основного методу в цьому екземплярі викликається екземпляр створеного потоку та метод запуску. Основний метод буде чекати, поки потік дасть сповіщення. Під час виконання програми основний метод чекає повного виконання методу запуску та чекає методу сповіщення. Після виклику методу сповіщення основний метод припиняє чекати і починає виконувати решту коду. Main чекає, поки завершиться нитка калькулятора. Нарешті друкується результат суми.
Якщо немає синхронізованого блоку, і якщо основний метод має код, як показано нижче, він видасть результат як нуль, оскільки він не чекає завершення іншого потоку.
Калькулятор t1 = новий калькулятор ();
t1. start ();
System.out.println (t1.sum);
сон проти чекати на Яві | |
Метод сну змушує поточний потік призупиняти виконання на задану кількість мілісекунд за умови точності та точності системних таймерів та планувальників. | Метод очікування змушує поточний потік чекати, поки інший потік викликає метод сповіщення або notifyAll для об'єкта. |
Асоціація з замком | |
Метод сну не відпускає замок на об'єкт під час синхронізації. | Метод очікування звільняє блокування під час синхронізації. |
Спосіб виконання | |
Метод сну виконується на поточній потоці. | Метод очікування викликається на об’єкті. |
Асоційований клас | |
Сон - це метод класу Thread. | Очікування - це метод класу Object. |
Завершення | |
Процес сну завершується після закінчення зазначеної кількості часу. | Метод очікування переривається за допомогою виклику методів сповіщення або notifyAll. |
В операційній системі працює кілька процесів. Кожен процес може мати декілька потоків. Потік - це найменша одиниця обробки в операційній системі. Мова програмування Java підтримує багатопотоковість. Це дозволяє одночасно запускати кілька потоків. Сон і очікування - це два способи, які можна використовувати при впровадженні декількох ниток. Різниця між режимом сну і очікування в Java полягає в тому, що сон використовується для призупинення виконання поточного потоку на вказану кількість мілісекунд, тоді як метод очікування використовується для того, щоб поточний потік чекав, поки інший потік викликає сповіщення або notifyAll метод для об’єкта.
1. «Зв'язок між нитками на Java - Javatpoint».. JavaTPoint. Доступний тут
2. Inter Thread Зв'язок у багатопотоковому режимі Java | Основний Java-підручник | Навчальна ніч. Доступний тут