Skirtumas tarp miego ir laukimo Java

Turinys:

Skirtumas tarp miego ir laukimo Java
Skirtumas tarp miego ir laukimo Java

Video: Skirtumas tarp miego ir laukimo Java

Video: Skirtumas tarp miego ir laukimo Java
Video: What is difference between sleep, yield and wait method ? || Java Concurrency Interview Question 2024, Liepa
Anonim

Pagrindinis skirtumas – miegas ir laukimas Java

Miegoti ir laukti yra du metodai, naudojami kelių gijų kūrimui Java. Miego metodas priklauso Thread klasei, o laukimo metodas yra iš Object klasės. Pagrindinis skirtumas tarp miego ir laukimo Java yra tas, kad miego režimas naudojamas sustabdyti dabartinės gijos vykdymą nurodytam skaičiui milisekundžių, o laukimo metodas naudojamas tam, kad dabartinė gija lauktų, kol kita gija iškvies pranešimą arba notifyAll metodas objektui.

Gija yra mažiausias apdorojimo vienetas operacinėje sistemoje. Tai vienas nuoseklus valdymo srautas programoje. Siūlai lengvi. Multithreading yra kelių gijų paleidimo vienu metu mechanizmas. Programavimo kalbos, tokios kaip „Java“, palaiko daugiagiją. Multithreading turi privalumų, nes leidžia vienu metu paleisti kelias gijas, o gijos yra nepriklausomos viena nuo kitos. „Java“yra metodų, kuriuos galima naudoti kelių gijų kūrimui. Du iš jų miega ir laukia.

Kas yra miegas Java?

Operacinėje sistemoje veikia keli procesai. Procesas yra vykdoma programa. Kiekvienas procesas gali turėti kelias gijas, o tarp šių gijų vyksta konteksto perjungimas. „Java“yra du būdai sukurti giją. Tai yra išplečiant gijos klasę arba įdiegus Runnable sąsają. Thread klasėje yra konstruktoriai ir metodai, skirti kurti ir atlikti operacijas su gijomis. Thread klasė išplečia objektų klasę ir įgyvendina Runnable sąsają. Vykdomąją sąsają turėtų įgyvendinti bet kuri klasė, kurios egzempliorius turi vykdyti gijos. Kai gija vykdoma, kodas, kurį reikia vykdyti, įrašomas paleidimo metodo viduje. Giją, kuri turėtų būti vykdoma, pasirenka gijų planavimo priemonė. Viename procese vykdoma tik viena gija.

Grieja pereina keliais etapais. Sukūręs Thread klasės objektą, programuotojas gali iškviesti pradžios metodą. Teigiama, kad prieš naudojant šį metodą gija yra naujos būsenos. Gijų planavimo priemonė pasirenka paleisti giją. Jei gijos planavimo priemonė dar nepasirinko, bet iškviečiamas pradžios metodas, tada gijos būsena yra paleidžiama. Kai gijų planavimo priemonė pasirenka vykdytiną giją, ji pereina į veikimo būseną. Jei gija gyva, bet šiuo metu netinkama paleisti, ji yra nevykdomos arba užblokuotos. Užbaigus vykdymo metodą, gija pereina į baigtą būseną. Tai yra pagrindinės siūlų gyvavimo ciklo fazės.

Gijų klasėje yra įvairių metodų, skirtų įvairioms užduotims atlikti. Miego metodas naudojamas miegoti tam tikrą laiką. Miego metodo sintaksė yra viešasis miegas (ilgos milisekundės), išmetantis InterruptedException. Dėl to šiuo metu vykdoma gija laikinai sustabdo vykdymą tam tikram milisekundžių skaičiui. Jei kita gija nutraukia dabartinę giją, dabartinės gijos nutraukimo būsena išvaloma, kai ši išimtis bus pašalinta.

Skirtumas tarp miego ir laukimo Java
Skirtumas tarp miego ir laukimo Java

01 pav.: Java programa su miego režimu

Pagal pirmiau pateiktą programą, vykdymo metode yra kodas, kuris turėtų būti vykdomas. Pagrindinėje programoje sukuriami du „ExampleThread1“objektai ir juose iškviečiami paleidimo metodai. Tai leis paleisti kodą vykdymo metodo viduje. Vienu metu vykdoma tik viena gija. Su siūlu.miegas (1000); leis pirmajai gijai nutraukti vykdymą 1000 milisekundžių. Kai gija miega, gijų planavimo priemonė paima kitą giją.

Kas yra laukti Java?

Kelios gijos gali pasiekti bendrinamą š altinį. Tai gali sukelti neteisingą išvestį. Sinchronizuojant giją galima sukurti tik vieną giją, kad būtų galima pasiekti bendrinamą š altinį. Įsivaizduokite tokią situaciją. Jei yra dvi gijos, pvz., t1 ir t2, t1 pradėkite įrašyti reikšmes į tekstinį failą, pavadintą Text1.txt. Šios reikšmės bus naudojamos kitam skaičiavimui, kai grįš t1. Jei t2 prasideda anksčiau nei grįžta t1, t2 gali pakeisti reikšmes, išsaugotas t1. Dėl to t1 gali pateikti neteisingą išvestį. Sinchronizavimo pagalba, kai t1 pradeda naudoti Text1.txt failą, tą failą galima užrakinti, todėl jis pasiekiamas tik t1. T2 negali jo pakeisti tol, kol t1 neatleidžia užrakto, kad pasiektų tą tekstinį failą. Kai užduotis bus baigta, t1 gali atleisti užraktą. Užraktas taip pat žinomas kaip monitorius.

Gijų sinchronizavimą galima pasiekti naudojant tarpgijų ryšį. Kritinė dalis yra kodo segmentas, kuris pasiekia bendrinamus išteklius. Vykdant ryšį tarp gijų, gijos veikimas kritinėje dalyje pristabdomas, o kitai gijai leidžiama įeiti į tą pačią kritinę sekciją, kuri turi būti vykdoma. Jis įgyvendinamas naudojant laukimo, pranešimo ir pranešimo apie visus metodus. Jie priklauso objektų klasei. Laukimo metodas naudojamas, kad dabartinė gija atlaisvintų užraktą ir lauktų, kol kita gija iškvies notify arba notifyAll metodą objektui. Pranešimo metodas naudojamas pažadinti vieną giją, kuri laukia užrakto. NotifyAll pažadina visas gijas, kurios laukia užrakinimo.

Skirtumas tarp miego ir laukimo Java_Paveikslėlis 02
Skirtumas tarp miego ir laukimo Java_Paveikslėlis 02

02 pav.: Skaičiuotuvo klasė

Pagrindinis skirtumas tarp miego ir laukimo Java
Pagrindinis skirtumas tarp miego ir laukimo Java

03 paveikslas: pagrindinis metodas

Skaičiuoklės klasė praplečia giją. Sinchronizuotas blokas yra vykdymo metodo viduje. For ciklo ir pranešimo metodas yra sinchronizuotame bloke. Pagrindiniame metode sukurtas gijos egzempliorius ir paleidimo metodas iškviečiamas tame egzemplioriuje. Pagrindinis metodas lauks, kol gija pateiks pranešimą. Vykdant programą pagrindinis metodas laukia, kol bus atliktas visas paleidimo metodas, ir laukia pranešimo metodo. Kai iškviečiamas pranešimo metodas, pagrindinis metodas nustoja laukti ir pradeda vykdyti likusį kodą. Pagrindinis laukia, kol bus baigta skaičiuotuvo gija. Galiausiai išspausdinamas sumos rezultatas.

Jei nėra sinchronizuoto bloko ir jei pagrindinis metodas turi kodą, kaip nurodyta toliau, jis pateiks išvestį kaip nulį, nes nelaukia, kol baigsis kita gija.

Skaičiuoklė t1=naujas skaičiuotuvas ();

t1. pradžia ();

System.out.println (t1.sum);

Koks yra miego ir laukimo panašumas Java?

Tiek miegoti, tiek laukti yra metodai, kuriuos galima naudoti diegiant kelių gijų sukūrimą Java

Kuo skiriasi miegas ir laukimas Java?

miegas prieš laukimą Java

Taikant miego režimą, dabartinė gijos vykdymas sustabdomas nurodytam milisekundžių skaičiui, atsižvelgiant į sistemos laikmačių ir planavimo priemonių tikslumą. Dėl laukimo metodo dabartinė gija laukia, kol kita gija iškvies notify arba notifyAll metodą objektui.
Susiejimas su užraktu
Miego metodas neatleidžia objekto užrakto sinchronizavimo metu. Palaukimo metodas atleidžia užraktą sinchronizavimo metu.
Vykdymo metodas
Miego metodas vykdomas dabartinėje gijoje. Objekte iškviečiamas laukimo metodas.
Susijusi klasė
Miegas yra gijų klasės metodas. Laukimas yra objektų klasės metodas.
Užbaigimas
Miego procesas baigiamas praėjus nurodytam laikui. Laukimo metodas nutraukiamas iškvietus notify arba notifyAll metodus.

Santrauka – miegoti prieš laukimą Java

Operacinėje sistemoje veikia keli procesai. Kiekvienas procesas gali turėti kelias gijas. Gija yra mažiausias apdorojimo vienetas operacinėje sistemoje. Java programavimo kalba palaiko daugiagiją. Tai leidžia vienu metu paleisti kelias gijas. Miegas ir laukimas yra du metodai, kuriuos galima naudoti diegiant kelių gijų kūrimą. Skirtumas tarp miego ir laukimo Java programoje yra tas, kad miego režimas naudojamas sustabdyti dabartinės gijos vykdymą nurodytam skaičiui milisekundžių, o laukimo metodas naudojamas tam, kad dabartinė gija lauktų, kol kita gija iškvies notify arba notifyAll. objekto metodas.

Rekomenduojamas: