b'\n_START_ARTICLE_\nTikrintas rakinimas\n_START_SECTION_\nProblema\n_START_PARAGRAPH_\n\xc5\xa0i klaida pasitaiko kuomet kokio nors ilgai kuriamo, neai\xc5\xa1ku ar prireiksian\xc4\x8dio objekto reik\xc5\xa1m\xc4\x97 yra null, kol to objekto i\xc5\xa1 ties\xc5\xb3 neprireikia. Jei vienu metu kod\xc4\x85 vykdo daug gij\xc5\xb3, null reik\xc5\xa1m\xc4\x99 gali vienu metu aptikti kelios gijos, kurios be reikalo sukurs ne vien\xc4\x85, o kelis objekto egzempliorius. Pavyzdyje_NEWLINE__NEWLINE_if (a==null)_NEWLINE_  a = new MusuObjektas();_NEWLINE_gali b\xc5\xabti sukurti keli MusuObjektas egzemplioriai (a priskirtas liks paskutinis sukurtas). Ma\xc5\xbe\xc5\xb3 ma\xc5\xbeiausiai, tai neprotingai naudojami kompiuterio resursai, ta\xc4\x8diau kai kuriais atvejais (pavyzd\xc5\xbeiui, jei kuriamas objektas pats registruojasi kokiose nors lentel\xc4\x97se ir ten paskui lieka) toks daugelio egzempliori\xc5\xb3 k\xc5\xabrimas gali b\xc5\xabti apskritai neleistinas.\n_START_SECTION_\nVien\xc4\x85kart tikrinto rakinimo klaida\n_START_PARAGRAPH_\nKadangi gij\xc5\xb3 sinchronizavimas yra brangi operacija, programuotojai neretai u\xc5\xbera\xc5\xa1o problemos sprendim\xc4\x85 kaip_NEWLINE__NEWLINE_if (a==null)_NEWLINE_  {_NEWLINE_     synchronized (this)_NEWLINE_       {_NEWLINE_          a = new MusuObjektas();_NEWLINE_       }_NEWLINE_  }_NEWLINE_\xc5\xa0is kodas neveikia teisingai. \xc5\xa0iuo atvej\xc5\xb3 naujas objektas sukuriamas ir a reik\xc5\xa1m\xc4\x97 priskiriama sinchronizuotame sakinyje, kur\xc4\xaf vienu metu gali vykdyti tik viena gija. Ta\xc4\x8diau neretai sukompiliuotas kodas i\xc5\xa1skiria atminties srit\xc4\xaf naujam objektui, priskiria kintam\xc4\x85jam a tos srities rei\xc5\xa1m\xc4\x99, ir tik tada pradeda vykdyti objekt\xc4\x85 inicializuojant\xc4\xaf konstruktori\xc5\xb3. Viena i\xc5\xa1 gij\xc5\xb3 gali gauti nenuliui lygi\xc4\x85 a reik\xc5\xa1m\xc4\x99, rodan\xc4\x8di\xc4\x85 \xc4\xaf tik pusiau sukonstruot\xc4\x85 objekt\xc4\x85, kurio metod\xc5\xb3 kvietimai grei\xc4\x8diausiai bus lydimi netik\xc4\x97t\xc5\xb3 veiksm\xc5\xb3 bei klaid\xc5\xb3. Nepadeda ir a deklaravimas lakiu kintamuoju.\n_START_SECTION_\nDukart tikrinto rakinimo klaida\n_START_PARAGRAPH_\nKai kurie programuotojai mano, jog vienakart tikrinto rakinimo klaid\xc4\x85 galima i\xc5\xa1taisyti \xc4\xafvedus pakartotin\xc4\x85 tikrinim\xc4\x85 jau sinchronizuotoje dalyje:_NEWLINE__NEWLINE_if (a==null)_NEWLINE_  {_NEWLINE_     synchronized (this)_NEWLINE_       {_NEWLINE_          if (a == null)_NEWLINE_            a = new MusuObjektas();_NEWLINE_       }_NEWLINE_  }_NEWLINE_Tai nieko i\xc5\xa1 esm\xc4\x97s nekei\xc4\x8dia \xe2\x80\x93 programa ir toliau dirba neteisingai. Be to, neteisingas darbas pasirei\xc5\xa1kia tik labai specifin\xc4\x97mis atsitiktin\xc4\x97mis aplinkyb\xc4\x97mis, tod\xc4\x97l net ir tikrai apie j\xc4\xaf \xc5\xbeinant, atkurti n\xc4\x97ra paprasta._NEWLINE_Nors \xc5\xbeinoma daug \xc4\xafvairi\xc5\xb3 bandym\xc5\xb3 dar kitaip taisyti tikrinto rakinimo klaidas, dauguma j\xc5\xb3 n\xc4\x97ra teisingi. Papras\xc4\x8diausia sinchronzuoti vis\xc4\x85 konstrukcij\xc4\x85, nors tai ir s\xc4\x85lygoje l\xc4\x97tesn\xc4\xaf darb\xc4\x85:_NEWLINE__NEWLINE_synchronized (this)_NEWLINE_  {_NEWLINE_    if (a==null)_NEWLINE_    a = new MusuObjektas();_NEWLINE_  }'