Ero nukkumisen ja odottamisen välillä Javassa

Sisällysluettelo:

Ero nukkumisen ja odottamisen välillä Javassa
Ero nukkumisen ja odottamisen välillä Javassa

Video: Ero nukkumisen ja odottamisen välillä Javassa

Video: Ero nukkumisen ja odottamisen välillä Javassa
Video: Lonely (short version) 2024, Heinäkuu
Anonim

Avainero – nukkuminen vs odotus Javassa

Sleep and odota ovat kaksi menetelmää, joita käytetään monisäikeistykseen Javassa. Unimenetelmä kuuluu Thread-luokkaan, kun taas odotusmenetelmä on Object-luokasta. avainero lepotilan ja odotuksen välillä Javassa on se, että unta käytetään keskeyttämään nykyisen säikeen suorittaminen määritetyksi millisekuntimääräksi, kun taas odotusmenetelmää käytetään saamaan nykyinen säie odottamaan, kunnes toinen säie kutsuu ilmoituksen tai objektin notifyAll-metodi.

Säike on käyttöjärjestelmän pienin käsittelyyksikkö. Se on yksi peräkkäinen ohjausvirta ohjelman sisällä. Langat ovat kevyitä. Monisäikeistys on mekanismi useiden säikeiden ajamiseen samanaikaisesti. Ohjelmointikielet, kuten Java, tukevat monisäikeistystä. Monisäikeistöllä on etuja, koska se mahdollistaa useiden säikeiden ajamisen samanaikaisesti ja säikeet ovat toisistaan riippumattomia. Javassa on menetelmiä, joita voidaan käyttää monisäikeistykseen. Kaksi heistä nukkuu ja odota.

Mitä uni on Javassa?

Käyttöjärjestelmässä on käynnissä useita prosesseja. Prosessi on suoritettava ohjelma. Jokaisella prosessilla voi olla useita säikeitä, ja näiden säikeiden välillä tapahtuu kontekstin vaihto. Javassa on kaksi tapaa luoda säiettä. Tämä on laajentamalla säikeen luokkaa tai toteuttamalla Runnable-liitäntä. Thread-luokassa on rakentajia ja menetelmiä säikeen toimintojen luomiseen ja suorittamiseen. Thread-luokka laajentaa Object-luokkaa ja toteuttaa Runnable-liittymän. Runnable-rajapinta tulee toteuttaa missä tahansa luokassa, jonka ilmentymät on tarkoitettu suoritettavaksi säikeellä. Kun säiettä suoritetaan, suoritettava koodi kirjoitetaan suoritusmenetelmän sisään. Säikeen ajoitus valitsee säikeen, jonka pitäisi ajaa. Vain yksi säie suoritetaan yhdessä prosessissa.

Käie käy läpi useita vaiheita. Luotuaan Thread-luokan objektin ohjelmoija voi kutsua aloitusmenetelmän. Ennen tämän menetelmän käyttämistä säikeen sanotaan olevan uudessa tilassa. Säikeen ajoitus valitsee suoritettavan säikeen. Jos säikeen ajoitus ei ole vielä valinnut säiettä, mutta jos aloitusmenetelmä kutsutaan, säie on ajettavassa tilassa. Kun säikeen ajoitus valitsee suoritettavan säikeen, se siirtyy käynnissä olevaan tilaan. Jos säie on elossa, mutta se ei ole tällä hetkellä kelvollinen suoritettavaksi, se on ei-ajo-tilassa tai estetty. Suoritusmenetelmän päätyttyä säie siirtyy päätettyyn tilaan. Nämä ovat langan elinkaaren päävaiheita.

Säieluokassa on käytettävissä useita menetelmiä eri tehtävien suorittamiseen. Unimenetelmää käytetään nukkumaan menetelmä tietyn ajan. Nukkumismenetelmän syntaksi on julkinen void-lepotila (pitkiä millisekunteja), joka heittää InterruptedException. Se saa parhaillaan suoritettavan säikeen keskeyttämään suorituksen väliaikaisesti tietyn määrän millisekunteja. Jos toinen säie keskeyttää nykyisen säikeen, nykyisen säikeen keskeytetty tila tyhjennetään, kun tämä poikkeus heitetään.

Ero nukkumisen ja odottamisen välillä Javassa
Ero nukkumisen ja odottamisen välillä Javassa

Kuva 01: Java-ohjelma nukkumismenetelmällä

Yllä olevan ohjelman mukaan suoritusmenetelmä sisältää koodin, joka tulee suorittaa. Pääohjelmassa luodaan EsimerkkiThread1:n kaksi objektia ja aloitusmenetelmät vedetään niihin. Tämä mahdollistaa koodin suorittamisen suoritusmenetelmän sisällä. Vain yksi säie suoritetaan kerrallaan. Langan kanssa.nukkua (1000); sallii ensimmäisen säikeen lopettaa suorituksen 1000 millisekunnin ajaksi. Kun lanka on lepotilassa, säikeen ajoitus poimii toisen säikeen.

Mitä on odotus Javassa?

Useat säikeet voivat käyttää jaettua resurssia. Se voi aiheuttaa väärän tuloksen. Säikeen synkronointia voidaan käyttää vain yhden säikeen luomiseen jaetun resurssin käyttämiseen. Oletetaan seuraava tilanne. Jos säiettä on kaksi, kuten t1 ja t2, t1 alkaa tallentaa arvoja tekstitiedostoon nimeltä Text1.txt. Näitä arvoja käytetään johonkin muuhun laskelmaan, kun t1 palauttaa. Jos t2 alkaa ennen kuin t1 palaa, t2 voi muuttaa t1:n tallentamia arvoja. Tämä voi aiheuttaa sen, että t1 antaa väärän lähdön. Synkronoinnin avulla, kun t1 alkaa käyttää Text1.txt-tiedostoa, tiedosto voidaan lukita, joten siihen pääsee käsiksi vain t1. T2 ei voi muuttaa sitä ennen kuin t1 vapauttaa lukituksen päästäkseen kyseiseen tekstitiedostoon. Kun tehtävä on suoritettu, t1 voi vapauttaa lukon. Lukko tunnetaan myös monitorina.

Säikeen synkronointi voidaan saavuttaa säikeiden välisellä tiedonsiirrolla. Kriittinen osa on koodisegmentti, joka käyttää jaettuja resursseja. Säikeiden välisessä tiedonsiirrossa säiettä keskeytetään sen kriittisessä osassa ja toisen säikeen sallitaan tulla samaan kriittiseen osaan suoritettavaksi. Se toteutetaan odotus-, ilmoitus- ja notifyAll-menetelmillä. Ne kuuluvat Object-luokkaan. Odotusmenetelmää käytetään sallimaan nykyisen säikeen vapauttaa lukitus ja odottaa, kunnes toinen säie kutsuu objektin notify- tai notifyAll-menetelmän. Ilmoitusmenetelmää käytetään herättämään yksi lanka, joka odottaa lukkoa. NotifyAll herättää kaikki langat, jotka odottavat lukossa.

Ero nukkumisen ja odottamisen välillä Javassa_Kuva 02
Ero nukkumisen ja odottamisen välillä Javassa_Kuva 02

Kuva 02: Laskinluokka

Keskeinen ero nukkumisen ja odottamisen välillä Javassa
Keskeinen ero nukkumisen ja odottamisen välillä Javassa

Kuva 03: Päämenetelmä

Laskin-luokka laajentaa säiettä. Synkronoitu lohko on ajomenetelmän sisällä. For-silmukka- ja ilmoitusmenetelmä on synkronoidun lohkon sisällä. Päämenetelmän sisällä luodaan säikeen esiintymä ja aloitusmenetelmä kutsutaan kyseisessä ilmentymässä. Päämenetelmä odottaa, kunnes säie antaa ilmoituksen. Ohjelmaa suoritettaessa päämetodi odottaa ajomenetelmän koko suoritusta ja odottaa notify-metodia. Kun ilmoitusmenetelmä on kutsuttu, päämenetelmä lopettaa odottamisen ja alkaa suorittaa loput koodista. Main odottaa, kunnes Laskin-säie on valmis. Lopuksi summan tulos tulostetaan.

Jos synkronoitua lohkoa ei ole ja jos päämenetelmällä on alla oleva koodi, se antaa tulosteen nollaksi, koska se ei odota toisen säikeen valmistumista.

Laskin t1=uusi laskin ();

t1. aloita ();

System.out.println (t1.sum);

Mikä on samank altaisuus nukkumisen ja odottamisen välillä Javassa?

Sekä nukkuminen että odotus ovat menetelmiä, joita voidaan käyttää toteutettaessa monisäikeistystä Javassa

Mitä eroa on nukkumisen ja odottamisen välillä Javassa?

nukkuminen vs odotus Javassa

Sleep-menetelmä saa nykyisen säikeen keskeyttämään suorituksen määritetyksi määräksi millisekunteja järjestelmän ajastimien ja ajastimien tarkkuuden ja tarkkuuden mukaan. Odotusmenetelmä saa nykyisen säikeen odottamaan, kunnes toinen säie kutsuu objektin notify- tai notifyAll-metodia.
Yhteys lukon kanssa
Sleep-menetelmä ei vapauta objektin lukitusta synkronoinnin aikana. Odotusmenetelmä vapauttaa lukon synkronoinnin aikana.
Suoritustapa
Sleep-menetelmä suoritetaan nykyisessä säikeessä. Odotusmenetelmä kutsutaan objektille.
Liittynyt luokka
Uni on säikeen luokan menetelmä. Odotus on Object-luokan menetelmä.
Valmis
Nukkumisprosessi päättyy määritetyn ajan kuluttua. Odotusmenetelmä keskeytyy kutsumalla notify- tai notifyAll-menetelmiä.

Yhteenveto – nukkuminen vs odotus Javassa

Käyttöjärjestelmässä on käynnissä useita prosesseja. Jokaisella prosessilla voi olla useita säikeitä. Säie on käyttöjärjestelmän pienin käsittelyyksikkö. Java-ohjelmointikieli tukee monisäikeistystä. Se mahdollistaa useiden säikeiden ajamisen samanaikaisesti. Nukkuminen ja odotus ovat kaksi menetelmää, joita voidaan käyttää monisäikeistyksen toteutuksessa. Ero lepotilan ja odotuksen välillä Javassa on se, että unta käytetään keskeyttämään nykyisen säikeen suorittaminen tietyksi millisekuntimääräksi, kun taas odotusmenetelmää käytetään saamaan nykyinen säie odottamaan, kunnes toinen säie kutsuu ilmoituksen tai notifyAll. menetelmä objektille.

Suositeltava: