Ano ang Maghintay at Abisuhan sa Java?



Maghintay at Abisuhan sa Java ang dalawang pangwakas na pamamaraan na nagpapahintulot sa mga thread na makipag-usap sa bawat isa. Tutulungan ka ng artikulong ito sa mga detalye

Ang tampok sa Java ay nagbibigay-daan sa kasabay na pagpapatupad ng dalawa o higit pang mga bahagi ng isang programa. Ang bawat bahagi ay isang Thread. Ang mga thread na ito ay madalas na kailangang i-coordinate ang kanilang mga aksyon. Ginagawa ito gamit ang ilang pangwakas na pamamaraan tulad ng Maghintay at Abisuhan sa Java. Tutulungan ka ng artikulong ito na maunawaan nang detalyado ang mga pamamaraang ito.

Tatalakayin ko ang mga paksa sa sumusunod na pagkakasunud-sunod:





Magsimula na tayo!

Ano ang Pagsabay sa Thread?

Ang mga program na multi-thread ang maaaring regular na magkaroon ng isang sitwasyon kung saan maramihang pagtatangka upang makarating sa parehong mapagkukunan na gumagawa ng mapanlinlang at nakakagulat na mga kinalabasan. Sa mga oras, higit sa isang thread ang maaaring subukang mag-access ng isang nakabahaging mapagkukunan, kailangan mong tiyakin na ang mapagkukunan ay gagamitin ng isang thread lamang sa bawat pagkakataon. Maaari itong magawa gamit Pagsasabay sa Java.



Pinag-uusapan ngayon ang tungkol sa Botohan. Ang botohan ay isang proseso ng pagsubok ng isang kondisyon nang paulit-ulit hanggang sa ito ay totoo. Ang pamamaraang ito ay ipinatupad sa tulong ng upang suriin kung ang isang partikular na kundisyon ay totoo o hindi. Maaari mong gamitin ang pamamaraang ito para sa mga thread ngunit ang pamamaraang ito ay nagsasayang ng maraming mga siklo ng CPU at pati na rin ginagawang napaka-episyente ang proseso ng pagpapatupad. Upang maiwasan ang mga ganitong uri ng mga bug, ipinakilala ang mga pamamaraan tulad ng Maghintay at Abisuhan sa Java.

Ano ang mga pamamaraan ng Maghintay () at Abisuhan ()?

Upang malutas ang problema sa multithreading, mga pamamaraan tulad ng Maghintay at Abisuhan sa ay ginamit. Ginagamit ng klase ng Bagay ang tatlong pangwakas na pamamaraan na nagpapahintulot sa mga thread na makipag-usap tungkol sa naka-lock na katayuan ng isang mapagkukunan. Ang mga ito ay tinatawag ding Guarded Blocks.

ano ang hashmap at hashtable sa java

Maghintay ()

Ang pamamaraang ito ay sanhi ng paghihintay ng thread hanggang sa ang ibang thread ay mag-uutos na ipaalam ang () at ipagbigay-alam sa Lahat () na pamamaraan para sa bagay na ito. Sinasabi ng pamamaraang Wait () na ito ang thread ng pagtawag na bitawan ang isang kandado at matulog hanggang sa ang ilang iba pang mga thread ay pumasok sa parehong monitor at tumawag upang abisuhan (). Ang pamamaraang ito ay naglalabas ng lock bago maghintay at muling kinukuha ang lock bago bumalik mula sa paghihintay () na pamamaraan.



Maghintay () na pamamaraan ay mahigpit na isinama sa lock ng pag-synchronize. Ginagawa ito sa pamamagitan ng paggamit ng isang tampok na hindi magagamit nang direkta mula sa mekanismo ng pagsabay.

Syntax:

sinabay (lockObject) {habang (! kondisyon) {lockObject.wait ()} // gawin ang pagkilos dito}

Ang kasalukuyang thread ay dapat pagmamay-ari ng monitor ng object. Dapat itong tawagan mula sa naka-synchronize na pamamaraan lamang o kung hindi ay magtatapon ito ng isang pagbubukod.

Abisuhan ()

Ang pamamaraang ito ay ginagamit upang abisuhan ang na kailangan nitong gumana. Ginising nito ang isang thread na tumawag sa maghintay () pamamaraan sa parehong bagay.

Tandaan na ang pagtawag abisuhan () kalaunan ay hindi sumusuko ng isang kandado. Sinasabi nito sa isang naghihintay na thread na maaari itong magising. Gayunpaman, ang lock ay hindi talaga ibinigay hanggang sa makumpleto ang na-synchronize na block ng notifier. Ngayon sabihin, kung tumawag ka abisuhan () sa isang mapagkukunan ngunit kailangan pa rin ng notifier na magsagawa ng mga aksyon sa loob ng 10 segundo sa loob ng naka-synchronize na bloke nito, ang thread na naghihintay ay maghihintay kahit papaano para sa isa pang karagdagang 10 segundo para mailabas ng notifier ang lock sa object, kahit na ipagbigay-alam () ay tinawag.

Syntax:

sinabay (lockObject) {// establish_the_condition lockObject.notify () // anumang karagdagang code kung kinakailangan}

NotifyAll ()

Ginagamit ang pamamaraang ito upang gisingin ang lahat ng mga thread na tinawag na wait () sa parehong bagay. Ang pinakamataas na priority ng thread ay tatakbo muna sa karamihan ng sitwasyon kahit na hindi ito ginagarantiyahan. Ang iba pang mga bagay ay kapareho ng abisuhan () na pamamaraan.

Bakit at paano gamitin ang Wait () at Abisuhan () sa Java?

Dapat mong gamitin ang Maghintay at Abisuhan sa dahil ang mga ito ay nauugnay sa lock at ang object ay may isang lock. Kahit na ang paghihintay at pag-abiso sa Java ay isang pangunahing konsepto, tinukoy ang mga ito sa klase ng bagay . Nakakagulat, hindi ganun kadali isulat ang code gamit ang paghihintay at pag-abiso. Maaari mo itong subukan sa pamamagitan ng pagsulat ng code upang malutas ang problema ng prodyuser-consumer gamit ang paghihintay at abisuhan. Halimbawa ng consumer ng tagagawa-Maghintay at Abisuhan sa Java-EdurekaDito, may ibinahagi ako Pila atdalawang sinulidtinawag Tagagawa at Mamimili . Tagagawa inilalagay ng thread ang numero sa isang nakabahaging pila at Mamimili natupok ng thread ang mga numero mula sa ibinahaging timba.

Ang kundisyon ay kapag nagawa ang isang item, dapat na masabihan ang thread ng consumer at katulad din, pagkatapos na maabisuhan ang thread ng tagagawa ng konsumo. Ang inter-thread na itokomunikasyonay nakakamit gamit ang paghihintay at abisuhan sa Java.

Tandaan : W.ait at Hindiang mga pamamaraan ng pag-ayos ay tinukoy sa klase ng bagay, at dapat silang tawagan sa loob ng na-synchronize na bloke.

Halimbawa

pampublikong klase Thread1 {public static void main (String [] args) {Thread2 b = new Thread2 () b.start () na-synchronize (b) {subukan {System.out.println ('Naghihintay para sa 2 upang makumpleto ...' ) b.wait ()} catch (InterruptException e) {e.printStackTrace ()} System.out.println ('Total is:' + b.total)}}} pinalawak ng klase na Thread2 ang Thread1 {int total @Override public void run () {sinabay (ito) {para sa (int i = 0 i<=100 i++) { total += i } notify() }}}

Pansinin na sa halimbawa sa itaas, ang isang bagay ng Thread2, iyon ay b, ay na-synchronize. B kinumpleto nito ang pagkalkula bago maipalabas ng Pangunahing thread ang kabuuang halaga nito.

Output:

Dinadala tayo nito sa pagtatapos ng artikulong ito kung saan natutunan ang sa Maghintay at Abisuhan sa Java.Inaasahan kong ang nabanggit na nilalaman na napatunayan na maging kapaki-pakinabang sa pagpapahusay ng iyong kaalaman Patuloy na basahin, patuloy na tuklasin!

Suriin din ni Edureka, isang pinagkakatiwalaang kumpanya sa pag-aaral sa online na may isang network na higit sa 250,000 nasiyahan na mga nag-aaral na kumalat sa buong mundo. Ang kurso sa pagsasanay at sertipikasyon ng Java J2EE at SOA ng Edureka ay idinisenyo para sa mga mag-aaral at propesyonal na nais na maging isang Java Developer. Ang kurso ay dinisenyo upang bigyan ka ng isang panimula sa pag-program ng Java at sanayin ka para sa parehong core at advanced na mga konsepto ng Java kasama ang iba't ibang tulad ng Hibernate & Spring.