Ключова разлика - сън срещу чакане в Java
Sleep and wait са два метода, използвани за многопоточност в Java. Методът за заспиване принадлежи към клас Thread, докато методът за изчакване е от клас Object. Ключовата разлика между сън и изчакване в Java е, че сънят се използва за спиране на изпълнението на текущата нишка за посочения брой милисекунди, докато методът на изчакване се използва, за да накара текущата нишка да изчака, докато друга нишка извика известието или notifyAll метод за обекта.
Нишката е най-малката единица за обработка в операционната система. Това е единичен последователен поток на управление в рамките на програма. Конците са леки. Многопоточността е механизмът за изпълнение на множество нишки едновременно. Езици за програмиране като Java поддържа многопоточност. Многопоточността има предимства, защото позволява да се изпълняват едновременно множество нишки и темите са независими една от друга. В Java има методи, които могат да се използват за многопоточност. Двама от тях спят и чакат.
СЪДЪРЖАНИЕ
1. Общ преглед и ключова разлика
2. Какво е сън в Java
3. Какво е изчакване в Java
4. Прилики между сън и изчакване в Java
5. Сравнение едно до друго - сън срещу изчакване в Java в таблична форма
6. Резюме
Какво е сън в Java?
В операционната система се изпълняват множество процеси. Процесът е програма в изпълнение. Всеки процес може да има множество нишки и между тези нишки се случва превключване на контекста. В Java има два начина за създаване на нишка. Това е чрез разширяване на класа на нишката или чрез внедряване на интерфейс Runnable. Класът Thread има конструктори и методи за създаване и извършване на операции върху нишка. Класът Thread разширява клас Object и изпълнява Runnable интерфейс. Интерфейсът Runnable трябва да бъде реализиран от всеки клас, чиито екземпляри са предназначени да бъдат изпълнени от нишка. Когато нишката се изпълни, кодът, който трябва да се изпълни, се записва в метода на изпълнение. Нишката, която трябва да се изпълнява, е избрана от планиращия поток. Само един конец се изпълнява в един процес.
Нишката преминава през няколко фази. След създаване на обект от клас Thread, програмистът може да извика началния метод. Преди да се извика този метод, се казва, че нишката е в новото състояние. Планировщикът на нишки избира нишка за изпълнение. Ако нишката все още не е избрана от планировчика на нишки, но ако се извика методът за стартиране, тогава нишката е в състояние за изпълнение. След като планировчикът на нишки избере нишката за изпълнение, тя преминава в работещо състояние. Ако нишката е жива, но в момента не отговаря на условията за изпълнение, тогава тя е в невъзможност за изпълнение или блокирано състояние. След завършване на метода за изпълнение нишката преминава в прекратено състояние. Това са основните фази от жизнения цикъл на конеца.
Налични са различни методи в класа на нишките за изпълнение на различни задачи. Методът на заспиване се използва за заспиване на метода за определен период от време. Синтаксисът на метода за заспиване е публичен празен сън (дълги милисекунди) изхвърля InterruptException. Това кара текущата изпълняваща нишка да спре временно изпълнението за определен брой милисекунди. Ако друга нишка прекъсне текущата нишка, прекъснатото състояние на текущата нишка се изчиства, когато се изключи това изключение.
Фигура 01: Java програма с метод на заспиване
Според горната програма методът за изпълнение съдържа код, който трябва да бъде изпълнен. В основната програма се създават два обекта на ExampleThread1 и върху тях се извикват стартовите методи. Това ще позволи да стартирате кода в метода на изпълнение. Изпълнява се само по една нишка наведнъж. С нишката. сън (1000); ще позволи на първата нишка да прекрати изпълнението за 1000 милисекунди. Когато една нишка спи, планировчикът на нишки вдига другата нишка.
Какво е изчакване в Java?
Няколко нишки могат да имат достъп до споделен ресурс. Това може да доведе до генериране на неправилен изход. Синхронизацията на нишки може да се използва, за да се направи само една нишка за достъп до споделения ресурс. Да предположим ситуация, както следва. Ако има две нишки като t1 и t2, t1 започнете да записвате стойности в текстов файл, наречен Text1.txt. Тези стойности ще бъдат използвани за някои други изчисления, когато t1 се върне. Ако t2 започне преди t1 да се върне, t2 може да промени стойностите, записани от t1. Това може да накара t1 да предостави грешен изход. С помощта на синхронизацията, когато t1 започне да използва файла Text1.txt, този файл може да бъде заключен, така че е достъпен само от t1. T2 не може да го промени, докато t1 освободи заключването за достъп до този текстов файл. Когато задачата приключи, t1 може да освободи заключването. Заключването е известно и като монитор.
Синхронизацията на нишките може да бъде постигната чрез комуникация между нишките. Критичен раздел е кодов сегмент, който има достъп до споделените ресурси. В комуникацията между нишките нишката е поставена на пауза, изпълнявайки се в своята критична секция, и на друга нишка е позволено да влезе в същата критична секция, която трябва да бъде изпълнена. Прилага се с помощта на методите wait, notify и notifyAll. Те принадлежат към класа Object. Методът за изчакване се използва, за да позволи на текущата нишка да освободи заключването и да изчака, докато друга нишка извика метода notify или notifyAll за обекта. Методът за известяване се използва за събуждане на една нишка, която чака заключването. NotifyAll събужда всички нишки, които чакат на ключалката.
Фигура 02: Клас на калкулатора
Фигура 03: Основен метод
Класът Калкулатор разширява нишката. Синхронизираният блок е вътре в метода за изпълнение. Методът за цикъл и уведомяване е вътре в синхронизирания блок. Вътре в основния метод на този екземпляр се извиква екземпляр от създадена нишка и методът start. Основният метод ще изчака, докато нишката даде уведомление. Когато изпълнява програмата, основният метод изчаква до цялото изпълнение на метода за изпълнение и чака метода за уведомяване. След като бъде извикан методът за уведомяване, основният метод спира да чака и започва да изпълнява останалата част от кода. Основното чака, докато нишката на калкулатора завърши. Накрая се отпечатва резултатът от сумата.
Ако няма синхронизиран блок и ако основният метод има код, както е показано по-долу, той ще даде изхода като нула, защото не чака завършване на другата нишка.
Калкулатор t1 = нов калкулатор ();
t1. старт ();
System.out.println (t1.sum);
Каква е приликата между сън и изчакване в Java?
Сънят и чакането са методи, които могат да се използват при внедряване на многопоточност в Java
Каква е разликата между сън и изчакване в Java?
Различна статия Средна преди таблица
сън срещу чакане в Java |
|
Методът на заспиване кара текущата нишка да спре изпълнението за посочения брой милисекунди, в зависимост от прецизността и точността на системните таймери и планиращи програми. | Методът wait изчаква текущата нишка да изчака, докато друга нишка извика метода notify или notifyAll за обекта. |
Асоциация с Lock | |
Методът на заспиване не освобождава заключването на обект по време на синхронизация. | Методът на изчакване освобождава заключването по време на синхронизация. |
Метод на изпълнение | |
Методът на заспиване се изпълнява върху текущата нишка. | На обекта се извиква методът на изчакване. |
Асоцииран клас | |
Сънят е метод от клас Thread. | Изчакването е метод на клас Обект. |
Завършване | |
Процесът на сън приключва след изтичане на определеното време. | Методът на изчакване се прекъсва чрез извикване на методите notify или notifyAll. |
Резюме - сън срещу чакане в Java
В операционната система се изпълняват множество процеси. Всеки процес може да има множество нишки. Нишката е най-малката единица за обработка в операционната система. Java езикът за програмиране поддържа многопоточност. Тя позволява едновременно да се изпълняват множество нишки. Сънят и чакането са два метода, които могат да се използват при внедряване на многопоточност. Разликата между сън и изчакване в Java е, че сънят се използва за спиране на изпълнението на текущата нишка за посочения брой милисекунди, докато методът за изчакване се използва, за да накара текущата нишка да изчака, докато друга нишка извика известието или известието метод за обекта.