Java-ominaisuus mahdollistaa kahden tai useamman ohjelman osan samanaikaisen suorittamisen. Jokainen osa on lanka. Näiden ketjujen on usein koordinoitava toimintaansa. Tämä tehdään muutamalla lopullisella menetelmällä, kuten Wait and Notify in Java. Tämä artikkeli auttaa sinua ymmärtämään nämä menetelmät yksityiskohtaisesti.
Keskustelen aiheista seuraavassa järjestyksessä:
- Mikä on langan synkronointi?
- Mitä ovat Wait () ja Notify () -menetelmät?
- Miksi ja miten Wait () ja Notify () -sovelluksia käytetään Java-ohjelmassa?
- Esimerkki
Aloitetaanpa!
Mikä on langan synkronointi?
Monisäikeisissä ohjelmissa voi säännöllisesti esiintyä tilanne, jossa useita yrittää päästä samalle resurssille, joka tuottaa vilpillisiä ja hämmästyttäviä tuloksia. Toisinaan useampi kuin yksi ketju saattaa yrittää käyttää jaettua resurssia. Sinun on varmistettava, että resurssia käyttää vain yksi ketju kerrallaan. Tämä voidaan tehdä käyttämällä Synkronointi Java-sovelluksessa.
Nyt puhutaan kyselystä. Pollaus on prosessi, jolla testataan ehtoa toistuvasti, kunnes se on totta. Tämä menetelmä toteutetaan tarkistaa, onko tietty ehto totta vai ei. Voit käyttää tätä menetelmää ketjuihin, mutta tämä menetelmä tuhlaa paljon myös suorittimen jaksoja tekee toteutusprosessista erittäin tehotonta. Tämäntyyppisten virheiden välttämiseksi otetaan käyttöön menetelmät, kuten Wait and Notify in Java.
Mitä ovat Wait () ja Notify () -menetelmät?
Monisäikeisen ongelman ratkaisemiseksi, kuten Odota ja Ilmoita sisään käytetään. Object-luokka käyttää näitä kolmea viimeistä menetelmää, joiden avulla ketjut voivat kommunikoida resurssin lukitusta tilasta. Niitä kutsutaan myös vartioiduiksi lohkoiksi.
kuinka muuntaa luku binaariksi pythonissa
Odota()
Tämä menetelmä saa ketjun odottamaan, kunnes toinen säie kutsuu tämän objektin metodit ilmoituksen () ja ilmoituksen kaikille (). Tämä Wait () -menetelmä käskee soittoketjua päästämään lukituksen irti ja menemään nukkumaan, kunnes joku muu säie tulee samaan näyttöön ja kutsuu ilmoittamaan (). Tämä menetelmä vapauttaa lukon ennen odottamista ja hankkii lukon takaisin ennen paluuta wait () -menetelmästä.
Wait () -menetelmä on kiinteästi integroitu synkronointilukkoon. Tämä tapahtuu käyttämällä ominaisuutta, jota ei ole saatavana suoraan synkronointimekanismista.
Syntaksi:
synkronoitu (lockObject) {while (! condition) {lockObject.wait ()} // suorita toiminto tässä}
Nykyisen ketjun on omistettava sen objektin näyttö. Sitä täytyy kutsua vain synkronoidusta menetelmästä, muuten se aiheuttaa poikkeuksen.
Ilmoittaa()
Tätä menetelmää käytetään ilmoitukseen että sen on toimittava. Se herättää yhden säikeen, jota kutsutaan odota() menetelmä samalla objektilla.
Huomaa, että soitat ilmoittaa() ei lopulta luovuta lukosta. Se kertoo odottavalle langalle, että se voi herätä. Lukosta luovutaan kuitenkin vasta, kun ilmoittajan synkronoitu lohko on valmis. Sano nyt, jos soitat ilmoittaa() resurssilla, mutta ilmoittajan on silti suoritettava toimintoja 10 sekunnin ajan synkronoidussa lohkossaan, odottanut säie joutuu odottamaan vielä vähintään 10 sekuntia, kunnes ilmoittaja vapauttaa objektin lukituksen, vaikka ilmoittaisin () oli kutsuttu.
Syntaksi:
synkronoitu (lockObject) {// luo_olosuhde lockObject.notify () // tarvittaessa lisäkoodi}
NotifyAll ()
Tätä menetelmää käytetään herättämään kaikki säikeet, jotka olivat kutsuneet odottamaan () samalla objektilla. Korkeimman prioriteetin säike suoritetaan ensin suurimmaksi osaksi tilanteesta, vaikka sitä ei taata. Muut asiat ovat samat kuin ilmoitus () -menetelmä.
Miksi ja miten Wait () ja Notify () -sovelluksia käytetään Java-ohjelmassa?
Käytä Odota ja Ilmoita -kohtaa koska ne liittyvät lukkoon ja esineellä on lukko. Vaikka odottaminen ja ilmoittaminen Java-ohjelmassa ovatkin melko peruskäsite, ne on määritelty objektiluokka . Yllättäen koodin kirjoittaminen odotus- ja ilmoitustoiminnoilla ei ole niin helppoa. Voit testata tämän kirjoittamalla koodin tuottajan ja kuluttajan ongelman ratkaisemiseksi odottamalla ja ilmoittamalla. Täällä minulla on jaettu Jonottaa jakaksi lankaanimeltään Tuottaja ja Kuluttaja . Tuottaja säie asettaa numeron jaettuun jonoon ja Kuluttaja säie kuluttaa numerot jaetusta ryhmästä.
Edellytyksenä on, että kun tuote on tuotettu, on ilmoitettava kuluttajakuitulangasta ja vastaavasti sen jälkeen, kun kulutuksen tuottajalanka on ilmoitettava. Tämä lankaviestintäsaavutetaan odottamalla ja ilmoittamalla Java-sovelluksessa.
Huomautus : W.ait ja notify-menetelmät on määritelty objektiluokassa, ja ne on kutsuttava synkronoidun lohkon sisään.
Esimerkki
public class Thread1 {public static void main (String [] args) {Thread2 b = new Thread2 () b.start () synchronized (b) {try {System.out.println ('Odottaa, että 2 on valmis ...' ) b.wait ()} catch (InterruptedException e) {e.printStackTrace ()} System.out.println ('Total is:' + b.total)}}} -luokka Thread2 laajentaa Thread1 {int total @Override public void run () {synkronoitu (tämä) {for (int i = 0 i<=100 i++) { total += i } notify() }}}
Huomaa, että yllä olevassa esimerkissä Thread2-objekti, eli b, synkronoidaan. Tämä b suorittaa laskennan loppuun, ennen kuin pääkierre antaa kokonaisarvonsa.
Tuotos:
Tämä tuo meidät tämän artikkelin loppuun, jossa olemme oppineet odota ja ilmoita Java-sovelluksessa.Toivon, että yllä mainitusta sisällöstä on osoittautunut hyödyllistä parantaa tietoa. Jatka lukemista, jatka tutkimista!
Katso myös Edureka, luotettava verkko-oppimisyritys, jolla on yli 250 000 tyytyväisen oppijan verkosto, joka levisi ympäri maailmaa. Edurekan Java J2EE- ja SOA-koulutus- ja sertifiointikurssit on suunniteltu opiskelijoille ja ammattilaisille, jotka haluavat olla Java-kehittäjiä. Kurssi on suunniteltu antamaan sinulle etumatka Java-ohjelmointiin ja kouluttamaan sekä ydin- että edistyneitä Java-käsitteitä sekä erilaisia kuten Hibernate & Spring.