Dallimi kryesor – gjumi kundrejt pritjes në Java
Gjumi dhe pritja janë dy metoda të përdorura për multithreading në Java. Metoda e gjumit i përket klasës Thread ndërsa metoda e pritjes është nga klasa Object. Dallimi kryesor midis gjumit dhe pritjes në Java është se gjumi përdoret për të pezulluar ekzekutimin e fillit aktual për numrin e caktuar të milisekondave ndërsa metoda e pritjes përdoret për të bërë që filli aktual të presë derisa një fill tjetër të thërrasë njoftimin ose Metoda notifyAll për objektin.
Një fije është njësia më e vogël e përpunimit në sistemin operativ. Është një rrjedhë e vetme sekuenciale e kontrollit brenda një programi. Fijet janë të lehta. Multithreading është mekanizmi i drejtimit të shumë fijeve në të njëjtën kohë. Gjuhët e programimit si Java mbështet multithreading. Multithreading ka përparësi sepse lejon ekzekutimin e shumë fijeve në të njëjtën kohë dhe thread-et janë të pavarura nga njëra-tjetra. Ka metoda në Java që mund të përdoren për multithreading. Dy prej tyre flenë dhe presin.
Çfarë është gjumi në Java?
Ka shumë procese që ekzekutohen në një sistem operativ. Një proces është një program në ekzekutim. Çdo proces mund të ketë fije të shumta, dhe ka një ndërrim të kontekstit që ndodh midis këtyre thread-ve. Në Java, ka dy mënyra për të krijuar një fije. Kjo është duke zgjeruar klasën e thread ose duke zbatuar ndërfaqen Runnable. Klasa Thread ka konstruktorë dhe metoda për të krijuar dhe kryer operacione në një thread. Klasa Thread zgjeron klasën Object dhe implementon ndërfaqen Runnable. Ndërfaqja Runnable duhet të zbatohet nga çdo klasë, instancat e së cilës synohen të ekzekutohen nga një thread. Kur thread-i ekzekutohet, kodi që duhet të ekzekutohet shkruhet brenda metodës run. Thread-i që duhet të ekzekutohet zgjidhet nga planifikuesi i thread-it. Vetëm një fill ekzekutohet në një proces të vetëm.
Një fije kalon nëpër disa faza. Pas krijimit të një objekti të klasës Thread, programuesi mund të thërrasë metodën e fillimit. Përpara se të thirret kjo metodë, filli thuhet se është në gjendjen e re. Planifikuesi i thread-it zgjedh një thread për të ekzekutuar. Nëse thread-i nuk është zgjedhur ende nga planifikuesi i thread-it, por nëse thirret metoda e fillimit, atëherë thread është në një gjendje të ekzekutueshme. Pasi planifikuesi i thread-it zgjedh thread-in për të ekzekutuar, ai kalon në gjendjen e ekzekutimit. Nëse filli është i gjallë, por aktualisht nuk kualifikohet për t'u ekzekutuar, atëherë ai është në gjendje jo të ekzekutueshme ose të bllokuar. Pas përfundimit të metodës së ekzekutimit, thread kalon në gjendjen e përfunduar. Këto janë fazat kryesore të ciklit jetësor të fillit.
Ka metoda të ndryshme të disponueshme në klasën thread për të kryer detyra të ndryshme. Metoda e gjumit përdoret për të fjetur metodën për një kohë të caktuar. Sintaksa për metodën e gjumit është gjumë e zbrazët publike (milisekonda të gjata) hedhjet InterruptedException. Ajo bën që thread-i aktualisht ekzekutues të ndalojë ekzekutimin përkohësisht për një numër të caktuar milisekonda. Nëse një thread tjetër ndërpret fillin aktual, statusi i ndërprerë i fillit aktual pastrohet kur hidhet ky përjashtim.
Figura 01: Programi Java me metodën e gjumit
Sipas programit të mësipërm, metoda e ekzekutimit përmban kodin që duhet të ekzekutohet. Në programin kryesor, krijohen dy objekte të ExampleThread1, dhe mbi to thirren metodat e fillimit. Kjo do të lejojë të ekzekutohet kodi brenda metodës së ekzekutimit. Vetëm një thread ekzekutohet në të njëjtën kohë. Me Fije.gjumë (1000); do të lejojë që filli i parë të përfundojë ekzekutimin për 1000 milisekonda. Kur një fill është në gjumë, planifikuesi i temave merr fillin tjetër.
Çfarë është pritja në Java?
Fijet e shumta mund të kenë akses në një burim të përbashkët. Mund të shkaktojë gjenerimin e një prodhimi të pasaktë. Sinkronizimi i temave mund të përdoret për të krijuar vetëm një fije për të hyrë në burimin e përbashkët. Supozoni një situatë si më poshtë. Nëse ka dy thread si t1 dhe t2, t1 fillon të ruajë vlerat në një skedar teksti të quajtur Text1.txt. Këto vlera do të përdoren për disa llogaritje të tjera kur të kthehet t1. Nëse t2 fillon përpara se t1 të kthehet, t2 mund të ndryshojë vlerat e ruajtura nga t1. Kjo mund të bëjë që t1 të sigurojë një dalje të gabuar. Me ndihmën e sinkronizimit, kur t1 fillon të përdorë skedarin Text1.txt, ai skedar mund të bllokohet, kështu që është i aksesueshëm vetëm nga t1. T2 nuk mund ta ndryshojë atë derisa t1 të lëshojë bllokimin për të hyrë në atë skedar teksti. Kur detyra të përfundojë, t1 mund të lëshojë bllokimin. Kyçja njihet edhe si monitor.
Sinkronizimi i temave mund të arrihet me komunikim ndërthread. Një seksion kritik është një segment kodi i cili akseson burimet e përbashkëta. Në komunikimin ndërthread, një thread ndalet duke ekzekutuar në seksionin e tij kritik dhe një thread tjetër lejohet të hyjë në të njëjtin seksion kritik për t'u ekzekutuar. Zbatohet duke përdorur metodat e pritjes, njoftimit dhe njoftimit të gjitha. Ato i përkasin klasës Object. Metoda e pritjes përdoret për të lejuar thread-in aktual të çlirojë bllokimin dhe të presë derisa një fill tjetër të thërrasë metodën notify ose notifyAll për objektin. Metoda e njoftimit përdoret për të zgjuar një fije të vetme që pret bllokimin. NotifyAll zgjon të gjitha temat që presin në bllokim.
Figura 02: Klasa e Llogaritësit
Figura 03: Metoda kryesore
Klasa Calculator zgjeron Thread-in. Blloku i sinkronizuar është brenda metodës së ekzekutimit. Metoda për ciklin dhe njoftimin është brenda bllokut të sinkronizuar. Brenda metodës kryesore, krijohet një shembull i një thread dhe metoda e fillimit thirret në atë shembull. Metoda kryesore do të presë derisa thread të japë një njoftim. Gjatë ekzekutimit të programit, metoda kryesore pret deri në të gjithë ekzekutimin e metodës së ekzekutimit dhe pret metodën e njoftimit. Pasi të thirret metoda e njoftimit, metoda kryesore ndalon së prituri dhe fillon të ekzekutojë pjesën tjetër të kodit. Main po pret derisa të përfundojë filli i Llogaritësit. Më në fund, shtypet rezultati i shumës.
Nëse nuk ka bllok të sinkronizuar dhe nëse metoda kryesore ka një kod si më poshtë, ajo do të japë rezultatin si zero sepse nuk pret që filli tjetër të përfundojë.
Llogaritësi t1=Llogaritësi i ri ();
t1. start ();
System.out.println (t1.sum);
Cila është ngjashmëria midis gjumit dhe pritjes në Java?
Edhe gjumi dhe pritja janë metoda që mund të përdoren kur zbatohet multithreading në Java
Cili është ndryshimi midis gjumit dhe pritjes në Java?
gjumë kundër pritjes në Java |
|
Metoda e gjumit bën që filli aktual të pezullojë ekzekutimin për numrin e caktuar të milisekondave, në varësi të saktësisë dhe saktësisë së kohëmatësve dhe programuesve të sistemit. | Metoda e pritjes bën që thread-i aktual të presë derisa një fill tjetër të thërrasë metodën notify ose notifyAll për objektin. |
Shoqata me kyçjen | |
Metoda e gjumit nuk e lëshon bllokimin në një objekt gjatë sinkronizimit. | Metoda e pritjes liron bllokimin gjatë sinkronizimit. |
Metoda e Ekzekutimit | |
Metoda e gjumit është ekzekutuar në lidhjen aktuale. | Metoda e pritjes thirret në objekt. |
Klasa e lidhur | |
Gjumi është një metodë e klasës Thread. | Pritja është një metodë e klasës Object. |
Përfundimi | |
Procesi i gjumit përfundon pasi të ketë mbaruar koha e specifikuar. | Mënyra e pritjes ndërpritet duke thirrur notify ose notifyTë gjitha metodat. |
Përmbledhje – gjumë kundër pritjes në Java
Ka shumë procese që ekzekutohen në sistemin operativ. Çdo proces mund të ketë fije të shumta. Një thread është njësia më e vogël e përpunimit në një sistem operativ. Gjuha e programimit Java mbështet multithreading. Ai lejon ekzekutimin e shumë fijeve në të njëjtën kohë. Gjumi dhe pritja janë dy metoda që mund të përdoren kur zbatohet multi-threading. Dallimi midis gjumit dhe pritjes në Java është se gjumi përdoret për të pezulluar ekzekutimin e fillit aktual për numrin e caktuar të milisekondave ndërsa metoda e pritjes përdoret për të bërë që thread-i aktual të presë derisa një fill tjetër të thërrasë notify ose notifyAll metodë për objektin.