Užrakto sakinys paima tam tikro objekto muteksą, vykdo sakinio bloką ir atleidžia užraktą. Laikant spyną, spyną laikantis sriegis gali įgyti ir vėl atlaisvinti užraktą. Bet koks kitas siūlas yra užblokuotas nuo užrakto ir laukia, kol užraktas bus atleistas.
Peržiūra:
Naudokite užrakto kodą
Atitinka
Galima manyti, kad pagrindinį užrakto kodą įgyvendina monitorius.
Kadangi kodas naudoja pabandyti... finalblokas, taigi, net jei užrakto sakinio tekste yra išimtis, užraktas atleidžiamas.
Negalima naudoti laukimo operatoriaus užrakto pareiškimo tekste.Negalite jo naudoti pareiškimo tekstelauktioperatoriaus užraktas。 Negalima naudoti laukimo operatoriaus užrakto pareiškimo tekste. Negalima naudoti laukimo operatoriaus užrakto pareiškimo tekste. Šis sakinys yra labai svarbus!
Dokumentacija:Hipersaito prisijungimas matomas.
Aš pats išbandau kodą,Naudokite užduotį, kad gautumėte užraktą, ir naudokite laukti, kad užblokuotumėte, kodas yra toks:
Kelis kartus įvykdžius šį kodą, vykdymo rezultatas nėra toks, kokio tikėtasi.
Kodėl? Jei bandysite naudoti raktinį žodį laukti, kai bandysite naudoti raktinį žodį laukti užrakto bloke, gausite šią kompiliavimo klaidą: negalima laukti užrakto sakinio tekste. Priežastis ta, kad baigus laukti, metodas gali būti vykdomas kitoje gijoje, o ne gijoje, o ne gijoje.raktinis žodistas pats siūlasUžrakinkite ir atlaisvinkite spyną。 Pakeiskite kodą, kad intuityviau pamatytumėte priežastį:
Gaukite spynos sriegio ID ir spynos atleidimo sriegio ID,Akivaizdu, kad ne ant gijos, todėl užrakto negalima sėkmingai atleisti, kaip parodyta paveikslėlyje žemiau:
Bandžiau modifikuoti kodą, išbandytas su gija, kelis kartus ir jis veikė taip, kaip tikėtasi, kodas yra toks:
(Pabaiga)
|