Разлика между заспиване и изчакване в Java

Съдържание:

Разлика между заспиване и изчакване в Java
Разлика между заспиване и изчакване в Java

Видео: Разлика между заспиване и изчакване в Java

Видео: Разлика между заспиване и изчакване в Java
Видео: СМЕСЬ ГТА И POSTAL на КНОПОЧНЫЙ ТЕЛЕФОН 2024, Юли
Anonim

Ключова разлика – заспиване срещу изчакване в Java

Sleep и wait са два метода, използвани за многопоточност в Java. Методът на заспиване принадлежи към клас Thread, докато методът на изчакване е от класа Object. Ключовата разлика между заспиване и изчакване в Java е, че заспиването се използва за спиране на изпълнението на текущата нишка за определен брой милисекунди, докато методът за изчакване се използва, за да накара текущата нишка да изчака, докато друга нишка извика уведомяването или notifyAll метод за обекта.

Нишката е най-малката единица за обработка в операционната система. Това е единичен последователен поток на управление в рамките на една програма. Нишките са леки. Многонишковостта е механизмът за изпълнение на множество нишки едновременно. Програмни езици като Java поддържат многопоточност. Многонишковостта има предимства, тъй като позволява да се изпълняват множество нишки едновременно и нишките са независими една от друга. В Java има методи, които могат да се използват за многопоточност. Двама от тях спят и чакат.

Какво е сън в Java?

В една операционна система се изпълняват множество процеси. Процесът е програма в процес на изпълнение. Всеки процес може да има множество нишки и има превключване на контекст между тези нишки. В Java има два начина за създаване на нишка. Това е чрез разширяване на класа на нишката или чрез прилагане на Runnable интерфейс. Класът Thread има конструктори и методи за създаване и извършване на операции върху нишка. Класът Thread разширява класа Object и имплементира Runnable интерфейс. Интерфейсът Runnable трябва да бъде имплементиран от всеки клас, чиито екземпляри са предназначени да бъдат изпълнени от нишка. Когато нишката се изпълни, кодът, който трябва да се изпълни, се записва в метода run. Нишката, която трябва да се изпълнява, се избира от планировчика на нишки. Само една нишка се изпълнява в един процес.

Една нишка преминава през няколко фази. След като създаде обект от клас Thread, програмистът може да извика метода start. Преди да се извика този метод, се казва, че нишката е в новото състояние. Планировчикът на нишки избира нишка за изпълнение. Ако нишката все още не е избрана от планировчика на нишки, но ако методът за стартиране е извикан, тогава нишката е в състояние на изпълнение. След като планировчикът на нишки избере нишката за изпълнение, тя преминава в състояние на изпълнение. Ако нишката е жива, но в момента не отговаря на условията за изпълнение, тогава тя е в неизпълнимо или блокирано състояние. След завършване на метода run нишката преминава в прекратено състояние. Това са основните фази от жизнения цикъл на нишката.

В класа на нишката има различни методи за изпълнение на различни задачи. Методът на заспиване се използва за заспиване на метода за определен период от време. Синтаксисът за метода на заспиване е public void sleep (дълги милисекунди) хвърля InterruptedException. Това кара текущо изпълняваната нишка да спре изпълнението временно за определен брой милисекунди. Ако друга нишка прекъсне текущата нишка, прекъснатият статус на текущата нишка се изчиства, когато това изключение бъде хвърлено.

Разлика между заспиване и изчакване в Java
Разлика между заспиване и изчакване в Java

Фигура 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 за обекта. Методът notify се използва за събуждане на една нишка, която чака заключването. NotifyAll събужда всички нишки, които чакат заключването.

Разлика между заспиване и изчакване в Java_Фигура 02
Разлика между заспиване и изчакване в Java_Фигура 02

Фигура 02: Клас калкулатор

Ключова разлика между заспиване и изчакване в Java
Ключова разлика между заспиване и изчакване в Java

Фигура 03: Основен метод

Класът Calculator разширява нишката. Синхронизираният блок е вътре в метода за изпълнение. Цикълът for и методът за уведомяване са вътре в синхронизирания блок. Вътре в основния метод се създава екземпляр на нишка и методът start се извиква на този екземпляр. Основният метод ще изчака, докато нишката даде известие. Когато изпълнява програмата, главният метод чака до пълното изпълнение на метода run и изчаква метода notify. След като методът notify бъде извикан, основният метод спира да чака и започва да изпълнява останалата част от кода. Главният изчаква завършването на нишката на калкулатора. Накрая резултатът от сумата се отпечатва.

Ако няма синхронизиран блок и ако основният метод има код по-долу, той ще даде изхода като нула, защото не чака другата нишка да завърши.

Калкулатор t1=нов калкулатор ();

t1. начало ();

System.out.println (t1.sum);

Каква е приликата между заспиване и изчакване в Java?

Както заспиването, така и изчакването са методи, които могат да се използват при внедряване на многопоточност в Java

Каква е разликата между заспиване и изчакване в Java?

заспиване срещу изчакване в Java

Методът на заспиване кара текущата нишка да спре изпълнението за определен брой милисекунди, в зависимост от прецизността и точността на системните таймери и планировчици. Методът за изчакване кара текущата нишка да изчака, докато друга нишка извика метода notify или notifyAll за обекта.
Асоцииране със заключване
Методът на заспиване не освобождава заключването на обект по време на синхронизация. Методът на изчакване освобождава заключването по време на синхронизация.
Метод на изпълнение
Методът на заспиване се изпълнява в текущата нишка. Методът за изчакване се извиква на обекта.
Свързан клас
Сънят е метод на клас Thread. Чакането е метод от клас Object.
Завършване
Процесът на заспиване е завършен след изтичане на определеното време. Методът на изчакване се прекъсва чрез извикване на методите notify или notifyAll.

Резюме – заспиване срещу изчакване в Java

В операционната система се изпълняват множество процеси. Всеки процес може да има множество нишки. Нишката е най-малката единица за обработка в операционна система. Езикът за програмиране Java поддържа многопоточност. Позволява едновременно изпълнение на множество нишки. Заспиването и изчакването са два метода, които могат да се използват при внедряване на многопоточност. Разликата между заспиване и изчакване в Java е, че заспиването се използва за спиране на изпълнението на текущата нишка за определен брой милисекунди, докато методът за изчакване се използва, за да накара текущата нишка да изчака, докато друга нишка извика notify или notifyAll метод за обекта.

Препоръчано: