Vad är Vänta och meddela i Java?



Vänta och meddela i Java är de två sista metoderna som gör att trådarna kan kommunicera med varandra. Den här artikeln hjälper dig med detaljerna

funktionen i Java möjliggör samtidig körning av två eller flera delar av ett program. Varje del är en tråd. Dessa trådar måste ofta samordna sina handlingar. Detta görs med några slutliga metoder som Vänta och meddela i Java. Den här artikeln hjälper dig att förstå dessa metoder i detalj.

Jag kommer att diskutera ämnena i följande ordning:





Låt oss börja!

Vad är trådsynkronisering?

Program med flera trådar kan regelbundet komma till en situation där flera försöka komma till samma resurs som ger bedrägliga och häpnadsväckande resultat. Ibland kan mer än en tråd försöka komma åt en delad resurs, du måste se till att resursen bara används av en tråd i taget. Detta kan göras med Synkronisering i Java.



Nu talar om Polling. Polling är en process för att testa ett tillstånd upprepade gånger tills det är sant. Denna metod implementeras med hjälp av för att kontrollera om ett visst villkor är sant eller inte. Du kan använda den här metoden för trådar men den här metoden slösar bort mycket CPU-cykler och också gör implementeringsprocessen mycket ineffektiv. För att undvika denna typ av buggar introduceras metoder som Wait och Notify i Java.

Vad är Wait () och Notify () metoder?

För att ta itu med multithreading-problemet använder metoder som Wait och Notify in används. Objektklassen använder dessa tre slutliga metoder som gör att trådar kan kommunicera om en resurs låsta status. De kallas också som de skyddade blocken.

hur man skapar session i java

Vänta()

Den här metoden får tråden att vänta tills en annan tråd åberopar notify () och notifyAll () metoder för detta objekt. Denna Wait () -metod ber den anropande tråden att släppa ett lås och gå i vila tills någon annan tråd kommer in i samma bildskärm och ringer för att meddela (). Denna metod släpper låset innan du väntar och återhämtar låset innan du återvänder från wait () -metoden.



Wait () -metoden är tätt integrerad med synkroniseringslåset. Detta görs med hjälp av en funktion som inte är tillgänglig direkt från synkroniseringsmekanismen.

Syntax:

synkroniserad (lockObject) {while (! condition) {lockObject.wait ()} // vidta åtgärden här}

Den aktuella tråden måste äga objektets bildskärm. Det måste bara anropas från den synkroniserade metoden, annars ger det ett undantag.

Meddela ()

Denna metod används för att meddela att den behöver fungera. Det väcker upp en tråd som kallas vänta() metod på samma objekt.

Observera att du ringer meddela () ger slutligen inte upp ett lås. Den berättar för en väntande tråd att den kan vakna. Låset ges dock inte upp förrän anmälarens synkroniserade block har slutförts. Säg nu, om du ringer meddela () på en resurs men anmälaren behöver fortfarande utföra åtgärder i 10 sekunder inom sitt synkroniserade block, den tråd som hade väntat måste vänta åtminstone ytterligare 10 sekunder för att anmälaren ska släppa låset på objektet, även om det meddelas () hade kallats.

Syntax:

synkroniserad (lockObject) {// etablera_förhållande lockObject.notify () // eventuell ytterligare kod om det behövs}

NotifyAll ()

Denna metod används för att väcka alla trådar som hade kallat wait () på samma objekt. Tråden med högsta prioritet kommer först att köras i större delen av situationen även om den inte är garanterad. Andra saker är desamma som notify () -metoden.

Varför och hur man använder Wait () och Notify () i Java?

Du bör använda Vänta och meddela i eftersom de är relaterade till lås och objekt har ett lås. Även om vänta och meddela i Java är ganska grundläggande begrepp, definieras de i objektklass . Överraskande nog är det inte så lätt att skriva koden med vänta och meddela. Du kan testa detta genom att skriva kod för att lösa problem med producent och konsument genom att vänta och meddela. Producentkonsumentexempel - Vänta och meddela i Java-EdurekaHär har jag en delad ochtvå trådarkallad Producent och Konsument . Producent tråd sätter numret i en delad kö och Konsument tråd förbrukar siffrorna från den delade skopan.

Villkoret är att när en artikel har producerats måste konsumenttråden meddelas och liknande, efter att konsumenttillverkarens tråd måste meddelas. Denna mellantrådkommunikationuppnås med hjälp av vänta och meddela i Java.

Notera : W.ait och Nejtify-metoder definieras i objektklassen, och de måste anropas i synkroniserat block.

Exempel

public class Thread1 {public static void main (String [] args) {Thread2 b = new Thread2 () b.start () synchronised (b) {try {System.out.println ('Waiting for 2 to complete ...' ) b.wait ()} catch (InterruptedException e) {e.printStackTrace ()} System.out.println ('Total is:' + b.total)}}} klass Thread2 utökar Thread1 {int totalt @Override offentlig ogiltig körning () {synkroniserat (detta) {för (int i = 0 i<=100 i++) { total += i } notify() }}}

Observera att i exemplet ovan synkroniseras ett objekt av Thread2, det vill säga b. Detta b slutför beräkningen innan huvudtråden matar ut sitt totala värde.

Produktion:

Detta leder oss till slutet av den här artikeln där vi har lärt oss på Vänta och meddela i Java.Jag hoppas att ovan nämnda innehåll visade sig vara till hjälp för att förbättra din kunskap. Fortsätt läsa, fortsätt utforska!

Kolla också ut av Edureka, ett pålitligt online-lärande företag med ett nätverk av mer än 250 000 nöjda elever spridda över hela världen. Edurekas Java J2EE- och SOA-utbildning och certifieringskurs är utformad för studenter och yrkesverksamma som vill bli Java-utvecklare. Kursen är utformad för att ge dig ett försprång till Java-programmering och träna dig för både kärn- och avancerade Java-koncept tillsammans med olika som Hibernate & Spring.