Шта је Чекање и обавештавање на Јави?



Ваит и Нотифи у Јави су две последње методе које омогућавају нитима да међусобно комуницирају. Овај чланак ће вам помоћи око детаља

функција у Јави омогућава истовремено извршавање два или више делова програма. Сваки део је нит. Ове нити често морају да координирају своје акције. То се ради помоћу неколико завршних метода попут Ваит анд Нотифи у Јави. Овај чланак ће вам помоћи да детаљно разумете ове методе.

О темама ћу расправљати следећим редоследом:





Почнимо!

Шта је синхронизација навоја?

Програми са више нити могу редовно долазити у ситуацију да вишеструки покушај да се дође до истог ресурса који даје лажне и запањујуће резултате. Понекад више нити може покушати да приступи дељеном ресурсу, потребно је да осигурате да ће ресурс истовремено користити само једна нит. То се може учинити помоћу Синхронизација у Јави.



Сада говоримо о анкетирању. Анкетирање је поступак вишекратног тестирања услова док није истина. Овај метод је имплементиран уз помоћ да провери да ли је одређени услов тачан или не. Ову методу можете користити за нити, али такође троши много процесорских циклуса чини процес примене врло неефикасним. Да би се избегле ове врсте грешака, уводе се методе попут Ваит и Нотифи у Јави.

Шта су методе Ваит () и Нотифи ()?

Да би се решили проблем са вишеструким навојем, користе се методе као што су Ваит анд Нотифи се користе. Класа Објецт користи ове три завршне методе које омогућавају нитима да комуницирају о закључаном статусу ресурса. Они се такође називају и Чуваним блоковима.

јава ц ++ питхон

Чекати()

Ова метода доводи до тога да нит чека док друга нит не позове методе нотифи () и нотифиАлл () за овај објекат. Ова метода Ваит () говори позивајућој нити да пусти браву и пређе у стање спавања све док нека друга нит не уђе на исти монитор и позове нотифи (). Ова метода отпушта браву пре чекања и поново је добија пре враћања из методе ваит ().



Метода Ваит () је чврсто интегрисана са закључавањем синхронизације. То се постиже коришћењем функције која није доступна директно из механизма синхронизације.

Синтакса:

синхронизовано (лоцкОбјецт) {вхиле (! цондитион) {лоцкОбјецт.ваит ()} // предузми радњу овде}

Тренутна нит мора бити власник надгледања објекта. Мора се позивати само из синхронизоване методе, иначе ће избацити изузетак.

Обавести ()

Овај метод се користи за обавештавање да треба да функционише. Буди једну нит која је назвала чекати() метода на истом објекту.

Имајте на уму да је позивање обавести () на крају се не одриче браве. Каже нит која чека да се може пробудити. Међутим, закључавање се заправо не одустаје док се синхронизовани блок обавештеника не заврши. Сад реците, ако позовете обавести () на ресурсу, али обавештавач још увек треба да изврши радње 10 секунди у оквиру свог синхронизованог блока, нит која је чекала мораће да сачека најмање још додатних 10 секунди да обавештаватељ отпусти закључавање на објекту, иако обавештава () је био позван.

Синтакса:

синхронизовано (лоцкОбјецт) {// успостави_услов лоцкОбјецт.нотифи () // било који додатни код ако је потребно}

НотифиАлл ()

Овај метод се користи за буђење свих нити које су позвале ваит () на истом објекту. Нит са највишим приоритетом прво ће се покренути у већини случајева иако није загарантована. Остале ствари су исте као метода нотифи ().

Зашто и како користити Ваит () и Нотифи () у Јави?

Требало би да користите функцију Чекај и Обавести ме јер су повезани са бравом и објекат има браву. Иако су чекање и обавештавање у Јави прилично основни концепт, они су дефинисани у класа објекта . Изненађујуће, није тако лако написати код помоћу чекања и обавештења. Ово можете тестирати писањем кода да бисте решили проблем произвођач-потрошач помоћу чекања и обавештења. Пример потрошача произвођача - сачекајте и обавестите у Јава-ЕдурекиЕво, имам заједничко Ред чекања идве нитипозвао Продуцент и Потрошач . Продуцент нит ставља број у дељени ред и Потрошач нит троши бројеве из дељеног сегмента.

Услов је да једном када се производ произведе, потрошачка нит мора бити обавештена и слично, након што је потребно пријавити потрошачку нит. Ова интер-ниткомуникацијапостиже се коришћењем чека и обавести у Јави.

Белешка : В.аит и Неметоде тифи дефинисане су у класи објекта, и они се морају позивати унутар синхронизованог блока.

Пример

јавна класа Тхреад1 {публиц статиц воид маин (Стринг [] аргс) {Тхреад2 б = нев Тхреад2 () б.старт () синхронизовано (б) {три {Систем.оут.принтлн ('Ваитинг фор 2 то цомплете ...') ) б.ваит ()} цатцх (ИнтерруптедЕкцептион е) {е.принтСтацкТраце ()} Систем.оут.принтлн ('Тотал ис:' + б.тотал)}}} класа Тхреад2 проширује Тхреад1 {инт тотал @Оверриде публиц воид рун () {синхронизовано (ово) {за (инт и = 0 и<=100 i++) { total += i } notify() }}}

Приметите да је у горњем примеру синхронизован објекат Тхреад2, а то је б. Ово б завршава прорачун пре него што главна нит изнесе своју укупну вредност.

Излаз:

Ово нас доводи до краја овог чланка где смо научили на Сачекајте и обавестите на Јави.Надам се да се горе поменути садржај показао корисним за побољшање вашег знање. Наставите да читате, наставите да истражујете!

Такође погледајте Едурека, поуздана компанија за учење на мрежи са мрежом од више од 250.000 задовољних ученика раширених широм света. Едурекин курс за обуку и сертификацију Јава Ј2ЕЕ и СОА дизајниран је за студенте и професионалце који желе да буду Јава програмер. Курс је дизајниран да вам пружи предност у Јава програмирању и да вас обучи за основне и напредне Јава концепте, заједно са разним попут Хибернате & Спринг.