Suositeltava, 2024

Toimituksen Valinta

Unen () ja odottavan () menetelmän välinen ero Java: ssa

Menetelmä nukkuu ja odottaa kuulostavan saman tehtävän suorittamiseen, mutta ne eroavat toisistaan ​​paljon. Sleep-menetelmä kuuluu Thread-luokkaan, ja odotusmenetelmä kuuluu Object-luokkaan. Tärkein ero, joka erottaa molemmat niistä, on se, että lepotapa pitää objektin lukon, kunnes se keskeytyy tai se lopettaa sen suorittamisen. Toisaalta odotusmenetelmä vapauttaa objektin lukon, jotta muut objektit suoritetaan, kunnes sitä jatketaan ilmoitusmenetelmällä. Unen ja odotusmenetelmän välillä on joitakin enemmän eroja; voit tutustua niihin alla olevassa vertailukaaviossa.

Vertailukaavio

Vertailun perusteetnukkuaodota
perustiedotLepotapa ei vapauta objektin lukkoa, ennen kuin se keskeytyy.Odota-menetelmä vapauttaa objektin lukon, jotta muut objektit voivat suorittaa, kunnes ilmoitus tai ilmoitusAll -menetelmä kutsutaan.
luokkaLepotapa määritellään Thread-luokassa.Odotusmenetelmä on määritelty Objektiluokassa.
SynkronoituLepotapaa ei tarvitse kutsua synkronoidussa yhteydessä.Odota-menetelmää on kutsuttava synkronoidussa yhteydessä.
ValmistuminenLepotilan toteutus suoritetaan, kun säike keskeyttää sen tai lepotilan aika on päättynyt.Odota menetelmän toteutus suoritetaan, kun ilmoitus () tai ilmoitusAll () -menetelmä keskeyttää sen.
StaattinenLepotapa on staattinen menetelmä.Odotusmenetelmä ei ole staattinen, minkä vuoksi se tarvitsee esille sen vetämistä.
suoritusUniameno suoritetaan nykyisellä langalla.Odotusmenetelmä suoritetaan objektilla.
poikkeusInterruptedExceptionIllegalArgumentException, IllegalMonitorStateException, keskeytettyException.

Lepotavan määritelmä

Lepotapa on Thread- luokan staattinen menetelmä. Lepotapa käynnistetään, kun lanka ei halua suorittaa mitään tehtävää tietyn ajan. Lepotapahtuma suorittaa sen suorittamisen joko silloin, kun menetelmän aika on umpeutunut, tai se keskeytyy jollakin muulla langalla suorituksessa. Kun nukkumismenetelmä on päättynyt, lanka saavuttaa jälleen ajettavan tilan. Vuodesta lepotilasta on kaksi, kuten alla on esitetty.

 julkinen staattinen natiivi tyhjä uni (pitkä millisekunti); julkinen staattinen tyhjä uni (pitkä millisekuntia ja int nanosekunnissa); 

Edellä mainitussa kahdessa muodossa voit tarkkailla aikaa mainitaan sekä lepotilan muodossa. Tämä johtuu siitä, että kierre nukkuu aina parametrissa mainittuun tiettyyn aikaan. Minkä tahansa muun langan keskeytyksen voi keskeyttää lepotapa sen suorittamisen aikana; siten se voi heittää keskeytetyn poiston. Sinun on huolehdittava siitä, että poikkeus käsitellään joko kokeiluversiolla tai Throws avainsanoja muuten, se johtaa kääntymisajan virheeseen. Lepotapa pidättää nykyisen objektin lukituksen suorituksessa ja ei salli minkään muun objektin suorittamista ennen kuin se lopettaa sen suorittamisen.

Odotusmenetelmän määritelmä

Odota on Objekti- luokassa määritelty menetelmä. Odotusmenetelmää käytetään, kun useat tehtävät (säikeet) kamppailevat samasta resurssista yksi kerrallaan. Odotustapa, kun sitä kutsutaan, vapauttaa lukituksen sen kohteen kohdalle, joka on käyttänyt odotusmenetelmää. Ja antaa mahdollisuus toiselle objektille saada suoritettua, kunnes ilmoitustapa otetaan käyttöön, joka jatkaa odotusmenetelmällä vapautetun objektin lukituksen jatkamista. Odotusmenetelmällä on seuraava muoto.

 odota(); odota (pitkä millisekunti); odota (pitkä millisekunnissa, int nanosekunnissa); 

Kuten edellä mainitussa kolmessa odotusmenetelmän muodossa, ensimmäisellä menetelmällä ei ole aikaparametriä, vaan se tarkoittaa, että odotusmenetelmän suorittaminen jatkuu, kunnes ilmoitus- tai informaatiomenetelmää ei käytetä. Kahdessa muussa menetelmässä on aikaparametrit. Joten ne suoritetaan, kunnes aika päättyy tai kunnes ilmoitus tai noitfyAll-menetelmä käynnistetään aikaisemmin kuin aika päättyy. Odotusmenetelmä voi heittää poikkeuksia. IllegalArgumentException, jos kulunut aika-argumentti on negatiivinen. IllegalMonitorStateException, jos nykyinen säike ei käytä resurssia. Keskeytetty poikkeama, jos odotusmenetelmä keskeytyy.

Unen ja odotusmenetelmän keskeiset erot Java-järjestelmässä

  1. Pääasema, joka erottaa lepo- ja odotusmenetelmän, on se, että lepotapa pitää objektin lukon, kunnes se keskeytyy tai sen aika päättyy. Odotusmenetelmä vapauttaa kuitenkin sen kohteen lukituksen, joka kutsuu sitä, ja antaa muille kohteille mahdollisuuden suorittaa.
  2. Lepotapa määritellään Thread- luokassa, kun taas odotusmenetelmä on määritelty Object- luokassa.
  3. Uniamenoa ei tarvitse kutsua synkronoidusta kontekstista. Mutta odotusmenetelmää on kutsuttava synkronoidusta.
  4. Lepotapa herätetään, jos menetelmän aika on päättynyt tai toinen säike keskeyttää. Odotusmenetelmä herätetään
    kun ilmoitus tai ilmoitus Kaikki menetelmä on käytössä.
  5. Lepotapa on staattinen menetelmä, kun taas odotusmenetelmä ei ole staattinen menetelmä.
  6. Uniameno suoritetaan nykyisellä langalla, kun taas odotusmenetelmä suoritetaan sille kutsuvalle objektille.
  7. Lepotavan aiheuttama poikkeus on keskeytetty, mutta poikkeukset thrwon by wait -menetelmällä ovat IllegalArgumentException, IllegalMonitorStateException, InterruptedException .

johtopäätös:

Kun useat säikeet haluavat käyttää samaa resurssia yksi kerrallaan, on käytettävä odotusmenetelmää. Kun lanka ei halua suorittaa mitään tehtävää, on käytettävä lepotapaa.

Top