Сравнителна таблица
Основа за сравнение | сън | изчакайте |
---|---|---|
Основен | Методът за заспиване не освобождава заключването на даден обект, докато не бъде прекъснато. | Изчакайте метода освобождава заключване на обекта, за да позволи на други обекти да изпълняват до уведомяване или notifyAll метод се извиква. |
клас | Методът за заспиване е дефиниран в клас Thread. | Методът за изчакване се дефинира в класа Object. |
Синхронно | Методът за заспиване не трябва да се извиква в рамките на синхронизирания контекст. | Методът за изчакване трябва да бъде извикан в рамките на синхронизирания контекст. |
завършване | Изпълнението на метода за заспиване приключва, когато даден прекъсвач го прекъсне или е изтекъл методът за време на сън. | Изчаква се изпълнение на метода, когато методът notify () или notifyAll () го прекъсне. |
статичен | Методът за заспиване е статичен метод. | Методът за изчакване не е статичен, затова е необходимо обектът да го извика. |
Екзекуция | Методът sleep се изпълнява в текущата нишка. | Методът чака се изпълнява върху обекта. |
изключение | InterruptedException | IllegalArgumentException, IllegalMonitorStateException, InterruptedException. |
Определение на метода на съня
Методът за заспиване е статичният метод на класа Thread . Методът sleep се извиква, когато нишката не иска да изпълнява никаква задача за определено време. Методът sleep изпълнява изпълнението си, когато времето на метода е изтекло, или се прекъсва от друга нишка в изпълнението. След като методът на сън завърши, нишката отново получава статуса си за изпълнение. Има два от метода на съня, както е показано по-долу.
публичен статичен естествен неактивен сън (дълъг милисекунда); обществен статичен неактивен сън (дълги милисекунди и int наносекунда);
В горните две форми можете да наблюдавате времето, споменато и в двата формата на метода на съня. Това е така, защото нишката винаги спи за определено време, споменато в параметъра. Методът на сън може да бъде прекъснат от всяка друга нишка по време на неговото изпълнение; следователно, той може да хвърли InterruptedExecption. Трябва да се погрижите изключението да се обработи или чрез try / catch блока или от Throws ключови думи в противен случай, това ще доведе до грешка при компилирането. Методът sleep задържа заключването на текущия обект в изпълнението и не позволява друг обект да се изпълнява, докато не приключи изпълнението му.
Определение на метода на изчакване
Wait е методът, определен в класа Object . Методът чака се използва, когато няколко задачи (нишки) се борят за един и същи ресурс един по един. Методът за изчакване при извикване освобождава заключването на обекта, който е извикал метода на изчакване. И дайте възможност на друг обект да се изпълни, докато не бъде извикан метод на уведомяване, който допълнително възобновява заключването на обекта, освободен от метода на изчакване. Методът за изчакване има следната форма.
изчакайте(); изчакайте (дълга милисекунда); изчакайте (дълга милисекунда, int наносекунда);
Както при горните три форми на метода на изчакване, първият метод няма времеви параметър, което означава, че изпълнението на метода на изчакване ще продължи, докато не бъде извикан метода на уведомяване или notifyAll. Останалите два метода имат времеви параметри. Така че те ще се изпълняват до изтичане на времето или до уведомяване или noitfyAll метод се извиква по-рано от изтичане на времето. Методът за изчакване може да хвърля изключения. IllegalArgumentException, ако зададеният аргумент е отрицателен. IllegalMonitorStateException, ако текущата нишка не използва ресурса. InterruptedException, ако методът за изчакване е прекъснат.
Ключови разлики между спящия режим и метода на изчакване в Java
- Основната точка, която отличава метода на сън и изчакване е, че методът на заспиване държи ключалката на обекта, докато не бъде прекъснат или времето му изтече. Методът за изчакване обаче освобождава заключването на обекта, който го извиква и дава възможност на други обекти да се изпълнят.
- Методът sleep е дефиниран в класа Thread, докато методът wait е дефиниран в класа Object .
- Методът на съня не трябва да се извиква от синхронизиран контекст. Но методът за изчакване трябва да бъде извикан от синхронизиран.
- Методът sleep се събужда, ако времето на метода е изтекло или е прекъснато от другата нишка. Методът за изчакване се събужда
когато се извика методът на уведомяване или уведоми всички. - Методът на сън е статичен метод, докато методът за изчакване не е статичен метод.
- Методът sleep се изпълнява на текущата нишка, докато методът wait се изпълнява на обекта, който го извиква.
- Изключението, изхвърлено от спящия метод, е InterruptedException, докато методите за изключения thrwon by wait са IllegalArgumentException, IllegalMonitorStateException, InterruptedException .
Заключение:
Когато няколко нишки искат да използват един и същ ресурс един по един, тогава трябва да се използва методът за изчакване. Когато дадена нишка не желае да изпълнява никаква задача, тогава трябва да се използва методът на заспиване.