جالب بود و ممنون که مطلب رو تکمیل کردید.اسم این روش هست double-checked locking و یه روش شناخته شده هست. ولی با کمال تأسف و تأثر، باید به عرض برسونم، که این روش ممکنه درست کار نکنه:
The "Double-Checked Locking is Broken" Declaration
من به شخصه خیلی ناراحت شدم وقتی فهمیدم این روش ممکنه کار نکنه! :(
نمیشه داخل synchronization و بعد از ساخت آبجکت یک متد از اون آبجکت رو صدا بزنیم تا مشکل Lazy initialization برطرف بشه؟!
مثلا
if ( __me == null ) {
synchronized (_lock) {
if (__me == null) {
// if not, instantiate and store
__me = new MySingleton();
__me.noOperation();
}
}
}