Спавање и чекање су две методе које се користе за мултитхреадинг на Јави. Метода спавања припада класи Тхреад док је метода чекања из класе Објецт. Тхе кључна разлика између спавања и чекања у Јави је то, оно стање спавања користи се за обустављање извршења тренутне нити за одређени број милисекунди, док се метода чекања употребљава да тренутни нит натера да причека док други нит позива метод нотифи ор нотифиАлл за објект.
Конац је најмања јединица обраде у оперативном систему. То је један секвенцијални ток контроле у оквиру програма. Нити су лагане. Мултитхреадинг је механизам покретања више нити истовремено. Програмски језици као што је Јава подржава мултитхреадинг. Мултитхреадинг има предности јер омогућава покретање више нити истовремено, а нити су неовисне једна о другој. У Јави постоје методе које се могу користити за мултитхреадинг. Њих двоје спавају и чекају.
1. Преглед и кључне разлике
2. Шта је спавање у Јави
3. Шта се чека у Јави
4. Сличности између спавања и чекања на Јави
5. Упоредна упоредба - спавање и чекање на Јави у табеларном облику
6. Резиме
У оперативном систему се покреће више процеса. Процес је програм који се извршава. Сваки процес може имати више нити, а међу њима се догађа пребацивање контекста. У Јави постоје два начина за креирање нити. То је проширивањем класе нити или применом Руннабле интерфејса. Класа Тхреад има конструкторе и методе за креирање и извођење операција на нити. Класа Тхреад проширује класу Објекта и имплементира Руннабле интерфејс. Интерфејс Руннабле требао би имплементирати било која класа чије инстанце требају бити изведене нитом. Када се нит изврши, код који треба да се изврши пише се у методи покретања. Конац који треба да се покрене одабире планер навоја. Само једна нит ради у једном процесу.
Конац пролази кроз неколико фаза. Након креирања објекта класе Тхреад, програмер може позвати методу покретања. Пре него што се позове на ту методу, каже се да је нит у новом стању. Планер нити бира нит који ће се покренути. Ако нит још није изабран од стране планера нити, али ако се позива метода покретања, нит се налази у стању за покретање. Након што планер нити изабере нит за извршење, прелази у стање рада. Ако је нит жива, али тренутно не може да се покреће, онда је у стању које се не може покренути или је блокирано. Након довршетка методе рун, нит прелази у заустављено стање. То су главне фазе животног циклуса нити.
У класи нити су доступне различите методе за обављање различитих задатака. Метода спавања користи се за успављивање методе током одређеног времена. Синтакса за метод спавања је јавно неважеће стање спавања (дуге милисекунде) избацује ИнтерруптедЕкцептион. То узрокује тренутно извршавајући нит да заустави извршење привремено за одређени број милисекунди. Ако друга нит прекине тренутни конац, прекида се статус тренутне нити брише када се изузеће овај изузетак.
Слика 01: Програм Јава са методом спавања
Према горе наведеном програму, метода рун садржи код који треба извршити. У главном програму креирају се два објекта ЕкамплеТхреад1 и на њих се позивају стартне методе. То ће омогућити покретање кода унутар методе покретања. Одједном се извршава само једна нит. Са Навојем. сан (1000); омогућиће да прва нит прекине извршење у трајању од 1000 милисекунди. Када нит спава, алат за планирање навоја узима другу нит.
Вишеструка нит може приступити заједничком ресурсу. То може узроковати генерисање погрешног излаза. Синхронизација нити може се користити за прављење само једне нити за приступ дељеном ресурсу. Претпоставимо ситуацију на следећи начин. Ако постоје две нити као т1 и т2, т1 започињу снимање вредности у текстуалну датотеку звану Тект1.ткт. Те вриједности ће се користити за неки други израчун када се т1 врати. Ако т2 започне прије него што се т1 врати, т2 може промијенити вриједности спремљене помоћу т1. То може узроковати да т1 обезбеди погрешан излаз. Уз помоћ синхронизације, када т1 започне користити Тект1.ткт датотеку, та се датотека може закључати, тако да јој је доступна само т1. Т2 не може га променити док т1 не ослободи закључавање за приступ тој датотеци текста. Када је задатак завршен, т1 може отпустити браву. Брава је такође позната и као монитор.
Синхронизација навоја може се постићи комуникацијом између нити. Критични одељак је сегмент кода који приступа заједничким ресурсима. У комуникацији између нити, нит се зауставља и ради у критичном делу, а дозвољено је да се уђе у исти критични одељак који се извршава. Проводи се помоћу метода чекања, нотификације и нотификацијеСве. Припадају класи Објекта. Метода чекања користи се да би се тренутном нити омогућило ослобађање закључавања и причекало док друга нит не изазове метод нотифи или нотифиАлл за објект. Метода нотификације користи се да пробуди једну нит која чека на закључавање. Обавијести пробуди све нити које чекају на закључавање.
Слика 02: Класа калкулатора
Слика 03: Главни метод
Класа Калкулатор продужује нит. Синхронизовани блок је унутар методе покретања. Метода фор петље и нотификације је унутар синхронизованог блока. Унутар главне методе, инстанца нити креирана и метода покретања се позива на тој инстанци. Главни метод ће сачекати док нит не објави обавештење. Приликом извршења програма, главна метода чека све време извршења методе покретања и чека методу нотификације. Једном када се позове метода нотификације, главна метода престаје чекати и започиње с извршавањем остатка кода. Маин чека док се не попуни нит калкулатора. На крају се исписује резултат.
Ако не постоји синхронизовани блок и ако главна метода има код као доле, дат ће излаз као нула, јер не чека да се друга нит заврши.
Калкулатор т1 = нови Калкулатор ();
т1. почетак ();
Систем.оут.принтлн (т1.сум);
слееп вс ваит на Јави | |
Метода мировања узрокује да тренутна нит заустави извршење одређеног броја милисекунди, у зависности од прецизности и тачности системских тајмера и планера. | Метода чекања узрокује да тренутна нит причека док друга нит позива метод нотифи или нотифиАлл за објект. |
Дружење са Лоцком | |
Метода спавања не ослобађа закључавање објекта током синхронизације. | Метода чекања ослобађа закључавање током синхронизације. |
Начин извршења | |
Метода мировања се изводи на тренутној нити. | На објекту се позива метода чекања. |
Ассоциатед Цласс | |
Спавање је метода класе нити. | Чекање је метода класе Објекта. |
Завршетак | |
Процес спавања је довршен након што се истекне одређено време. | Метода чекања прекида се позивањем метода нотификације или нотифиАлл. |
У оперативном систему се покреће више процеса. Сваки процес може имати више нити. Конац је најмања јединица обраде у оперативном систему. Јава програмски језик подржава мултитхреадинг. Омогућује истовремено покретање више нити. Спавање и чекање су двије методе које се могу примијенити у имплементацији с више навоја. Разлика између спавања и чекања у Јави је та што се стање спавања користи да се обустави извршење тренутне нити за одређени број милисекунди, док се метода чекања употребљава да тренутни нит натера да причека док други нит позове нотифи или нотифиАлл метода за објект.
1. „Комуникација међу нитма на Јави - Јаватпоинт.“. ЈаваТПоинт. Доступно овде
2. Интер Тхреад Комуникација у Јава Мултитхреадинг | Цоре Јава Туториал | Студитонигхт. Доступно овде