Soovitatav, 2022

Toimetaja Valik

Une () ja oodatava () meetodi erinevus Java-is

Meetod magab ja ootab kõlab nagu sama ülesanne, kuid nad on üksteisest palju erinevad. Sleep-meetod kuulub Thread-klassi ja ootamismeetod kuulub objektiklassi. Kõige olulisem erinevus, mis eristab neid mõlemat, on une meetod hoiab objekti lukust, kuni see katkeb või lõpetab selle täitmise. Teisest küljest vabastab ootamismeetod objekti lukust, et teised objektid käivituksid, kuni seda jätkatakse teatamismeetodiga. Une ja ootamise vahel on veel rohkem erinevusi; neid saab uurida allpool toodud võrdluskaardil.

Võrdluskaart

Võrdluse alusmagamaoota
PõhilineUnerežiim ei vabasta objekti lukust, kuni see katkestatakse.Ootamismeetod vabastab objekti lukustuse, et lasta teistel objektidel käivitada kuni teatamis- või teavitamisviis.
KlassUnerežiim on määratletud lõimeklassis.Ootamismeetod on määratletud objekti klassis.
SünkroonitudUnerežiimi ei pea sünkroonitud kontekstis kutsuma.Ootamismeetodit tuleb nimetada sünkroonitud kontekstis.
LõpetaminePuhkeoleku lõpetamine lõpeb siis, kui niit katkestab või unerežiimi aeg on lõppenud.Oodamismeetodi täitmine on lõpetatud, kui teate () või teavitamise () meetod katkestab selle.
StaatilineUnerežiim on staatiline meetod.Ootamismeetod ei ole staatiline, mistõttu on vaja seda kasutada.
TäitmineUnerežiim käivitatakse jooksvale niidile.Ootamismeetod täidetakse objektil.
ErandKatkestatudEdendusIllegalArgumentException, IllegalMonitorStateException, katkestatudException.

Puhkeoleku määratlus

Unerežiim on Thread- klassi staatiline meetod. Unerežiimi kasutatakse siis, kui niit ei soovi teatud aja jooksul ühtegi ülesannet täita. Unerežiim lõpetab selle täitmise kas siis, kui meetodi aeg on lõppenud, või katkestab selle mõne muu lõime teostamisel. Pärast unerežiimi lõpuleviimist saab lõng taas jooksva staatuse. Allpool on toodud kaks une meetodit.

 avalik staatiline natiivne une (pikk millisekund); avalik staatiline tühi uni (pikad millisekundid ja int nanosekund); 

Ülaltoodud kahes vormis on võimalik jälgida, et aega on mainitud nii unerežiimi vormis. Seda seetõttu, et niit magab alati parameetris nimetatud teatud aja. Une meetodit võib katkestada mis tahes muu lõng selle täitmise ajal; seega võib see katkestada. Te peate hoolitsema selle eest, et erandit käsitletakse kas proovimise / püügi blokeerimisega või Throws märksõnad muul viisil, see toob kaasa kompileerimisaja vea. Unerežiim hoiab praeguse objekti lukustuse täitmisel ja ei luba ühelgi teisel objektil täita, kuni see lõpetab selle täitmise.

Oodamismeetodi määratlus

Oodake on meetod, mis on määratud Objekti klassis. Ootamismeetodit kasutatakse siis, kui mitmed ülesanded (niidid) võitlevad sama ressursi eest ükshaaval. Ootamismeetod, kui see on käivitatud, vabastab lukust objekti, mis on kasutanud ootamismeetodit. Ja annab võimaluse mõnele teisele objektile teostada, kuni käivitatakse teatamismeetod, mis jätkab ooterežiimis vabastatud objekti lukustamist. Ootamismeetodil on järgmine vorm.

 oodake (); oota (pikk millisekund); oota (pikk millisekund, int nanosekund); 

Nagu ülalkirjeldatud kolmel ootamismeetodi vormil, ei ole esimesel meetodil ajaparameetrit, mis tähendab, et ootamismeetodi teostamine jätkub kuni teate või teateAll meetodit ei kasutata. Ülejäänud kahel meetodil on ajaparameetrid. Nii et nad täidavad aega, kuni aeg lõpeb või kuni teatamise või noitfyAlli meetodit kasutatakse varem kui aeg. Ootamismeetod võib erandeid visata. IllegalArgumentException, kui möödunud aja argument on negatiivne. IllegalMonitorStateException, kui praegune niit ei kasuta ressurssi. Kui katkestus on katkenud, katkestage katkestus.

Peamised erinevused une ja ootamismeetodi vahel Java-is

  1. Peamine punkt, mis eristab une- ja ootamismeetodit, on see, et unerežiim hoiab objekti lukust, kuni see katkeb või selle aeg lõpeb. Ootamismeetod vabastab aga selle objekti lukustuse, mis seda kutsub, ja annab teistele objektidele võimaluse teostada.
  2. Unerežiim on defineeritud lõimeklassis, samas kui ootamismeetod on määratletud Objekti klassis.
  3. Une meetodit ei ole vaja sünkroniseeritud kontekstist välja kutsuda. Kuid ootamismeetodit tuleb sünkroonida.
  4. Unerežiimi äratatakse, kui meetodi aeg on möödas või kui teine ​​niit katkestab. Ootamismeetod on äratatud
    kui teatatakse või teavitatakse kogu meetodit.
  5. Une meetod on staatiline meetod, kuid ootamismeetod ei ole staatiline meetod.
  6. Unerežiim käivitatakse jooksvale niidile, samal ajal kui ootamismeetod täidetakse seda esile kutsuvale objektile.
  7. Unetusmeetodi abil väljapandud erand on katkestatud, kuid ooteajaga thrwon tehtud erandid on IllegalArgumentException, IllegalMonitorStateException, InterruptedException .

Järeldus:

Kui mitu lõnga soovib kasutada sama ressurssi ükshaaval, tuleb kasutada ootamismeetodit. Kui niit ei soovi ühtegi ülesannet täita, tuleb kasutada unerežiimi.

Top