Сън и чакане са два метода, използвани за многопоточност в Java. Методът на заспиване принадлежи към клас Thread, докато методът на изчакване е от клас Object. Най- ключова разлика между сън и чакане в Java е това, sleep се използва за спиране на изпълнението на текущата нишка за посочения брой милисекунди, докато методът на чакане се използва, за да накара текущата нишка да изчака, докато друга нишка извика метода notify or notifyAll за обекта.
Нишката е най-малката единица за обработка в операционната система. Това е единичен последователен поток на контрол в рамките на програма. Нишките са леки. Многопоточността е механизмът за стартиране на няколко нишки едновременно. Езици за програмиране като Java поддържа многопоточност. Multithreading има предимства, защото позволява да се стартират няколко нишки едновременно и нишките са независими една от друга. В Java има методи, които могат да се използват за многопоточност. Двама от тях спят и чакат.
1. Преглед и ключова разлика
2. Какво е сън в Java
3. Какво е чакане в Java
4. Прилики между съня и чакането в Java
5. Паралелно сравнение - сън срещу изчакване в Java в таблична форма
6. Резюме
В операционна система работят множество процеси. Процесът е програма в изпълнение. Всеки процес може да има множество нишки и между тези нишки има контекстна смяна. В Java има два начина за създаване на нишка. Това е чрез разширяване на класа на нишката или чрез внедряване на Runnable интерфейс. Класът Thread има конструктори и методи за създаване и изпълнение на операции върху нишка. Класът Thread разширява клас Object и реализира Runnable интерфейс. Интерфейсът на Runnable трябва да бъде реализиран от всеки клас, чиито инстанции са предназначени да бъдат изпълнени от нишка. Когато нишката се изпълнява, кодът, който трябва да се изпълни, се записва вътре в метода на изпълнение. Нишката, която трябва да се изпълнява, е избрана от планиращия нишка. В един процес работи само една нишка.
Конец преминава през няколко фази. След създаването на обект от клас Thread, програмистът може да извика метода на стартиране. Преди да се позове на този метод, се казва, че нишката е в новото състояние. Планировникът на нишки избира нишка, която да се изпълнява. Ако нишката все още не е избрана от планировника на нишки, но ако се извика методът на стартиране, тогава нишката е в състояние за изпълнение. След като планировникът на нишки избира нишката за изпълнение, тя преминава в състояние на работа. Ако нишката е жива, но в момента не отговаря на условията за стартиране, тогава тя е в състояние, което не може да се изпълнява или е блокирано. След завършване на метода на изпълнение нишката преминава в прекратено състояние. Това са основните фази от жизнения цикъл на нишката.
Има различни методи, достъпни в класа на нишките, за изпълнение на различни задачи. Методът за сън се използва за заспиване на метода за определен период от време. Синтаксисът за метода на заспиване е публично невалиден сън (дълги милисекунди) хвърля InterruptedException. Това кара текущата изпълняваща нишка да спре изпълнението временно за определен брой милисекунди. Ако друга нишка прекъсне текущата нишка, прекъснатото състояние на текущата нишка се изчиства при изхвърляне на това изключение.
Фигура 01: Java програма с метод на заспиване
Според горната програма методът на изпълнение съдържа код, който трябва да бъде изпълнен. В основната програма се създават два обекта от ExampleThread1 и върху тях се извикват стартовите методи. Това ще позволи да стартирате кода в метода на изпълнение. Едно време се изпълнява само една нишка. С нишката. сън (1000); ще позволи на първата нишка да прекрати изпълнението за 1000 милисекунди. Когато една нишка спи, планировникът на нишката взима другата нишка.
Няколко нишки могат да имат достъп до споделен ресурс. Това може да доведе до генериране на неправилен изход. Синхронизирането на нишки може да се използва, за да се направи само една нишка за достъп до споделения ресурс. Да приемем ситуация, както следва. Ако има две нишки като t1 и t2, t1 започнете да записвате стойности в текстов файл, наречен Text1.txt. Тези стойности ще бъдат използвани за някои други изчисления, когато t1 се върне. Ако t2 стартира, преди t1 да се върне, t2 може да промени стойностите, запазени от t1. Това може да причини t1 да предостави грешен изход. С помощта на синхронизацията, когато t1 започне да използва файла Text1.txt, този файл може да бъде заключен, така че да е достъпен само от t1. T2 не може да го промени, докато t1 освободи заключването за достъп до този текстов файл. Когато задачата е завършена, t1 може да освободи ключалката. Бравата е известна още като монитора.
Синхронизирането на нишки може да бъде постигнато чрез комуникация между нишки. Критичен раздел е кодов сегмент, който осъществява достъп до споделените ресурси. В комуникацията между нишката, нишката е поставена на пауза, изпълнявана в своята критична секция, и е разрешено да влезе друга нишка в същата критична секция, която да бъде изпълнена. Той се реализира с помощта на методи за изчакване, уведомяване и известяване на всички. Те принадлежат към клас Object. Методът на изчакване се използва, за да позволи на текущата нишка да освободи ключалката и да изчака, докато друга нишка извика метода за известяване или notifyAll за обекта. Методът за уведомяване се използва за събуждане на една нишка, която чака заключването. NotifyAll буди всички нишки, които чакат на ключалката.
Фигура 02: Клас на калкулатор
Фигура 03: Основен метод
Класът Калкулатор разширява нишката. Синхронизираният блок е вътре в метода на изпълнение. Методът за цикъл и известие е вътре в синхронизирания блок. Вътре в основния метод се създава екземпляр от създадена нишка и методът на стартиране се извиква в този екземпляр. Основният метод ще изчака, докато нишката даде известие. При изпълнение на програмата основният метод изчаква до цялото изпълнение на метода на стартиране и чака метода за уведомяване. След като бъде извикан методът за уведомяване, основният метод спира да чака и започва да изпълнява останалата част от кода. Main чака до завършване на нишката на калкулатора. Накрая се отпечатва резултатът от сумата.
Ако няма синхронизиран блок и ако основният метод има код, както е показано по-долу, той ще даде резултата като нула, защото не чака другата нишка да завърши.
Калкулатор t1 = нов калкулатор ();
T1. старт ();
System.out.println (t1.sum);
сън срещу изчакване в Java | |
Методът на заспиване причинява текущата нишка да спре изпълнението за определения брой милисекунди, в зависимост от точността и точността на системните таймери и планиращи устройства. | Методът на чакане кара текущата нишка да изчака, докато друга нишка извика метода за известяване или notifyAll за обекта. |
Асоциация с Lock | |
Методът на заспиване не освобождава заключването на обект по време на синхронизация. | Методът на изчакване освобождава ключалката по време на синхронизация. |
Метод на изпълнение | |
Методът на заспиване се изпълнява на текущата нишка. | На обекта се извиква методът на изчакване. |
Асоцииран клас | |
Сънят е метод на нишката. | Изчакването е метод на клас обект. |
завършване | |
Процесът на сън е завършен след като изтече определеното време. | Методът на изчакване се прекъсва чрез извикване на методите за известяване или notifyAll. |
В операционната система работят множество процеси. Всеки процес може да има няколко нишки. Нишката е най-малката единица за обработка в операционна система. Java езикът за програмиране поддържа многопоточност. Тя позволява да се изпълняват няколко нишки едновременно. Сънят и чакането са два метода, които могат да се използват при прилагане на многонишкови резби. Разликата между сън и чакане в Java е, че сънът се използва за спиране на изпълнението на текущата нишка за определения брой милисекунди, докато методът на чакане се използва, за да накара текущата нишка да изчака, докато друга нишка извика уведомлението или notifyAll метод за обекта.
1. „Комуникация между нишки в Java - Javatpoint.“. JavaTPoint. Налични тук
2. Inter Thread Комуникация в Java Multithreading | Основен урок на Java | Studytonight. Налични тук