Concurrency متقدم

استبدل القفل المزدوج بـ StableValue للحصول على مفاردات كسولة.

✕ Java 8
class Config {
    private static volatile Config inst;
    static Config get() {
        if (inst == null) {
            synchronized (Config.class) {
                if (inst == null)
                    inst = load();
            }
        }
        return inst;
    }
}
✓ Java 25 (Preview)
class Config {
    private static final
        StableValue<Config> INST =
            StableValue.of(Config::load);

    static Config get() {
        return INST.get();
    }
}
هل ترى مشكلة في هذا الكود؟ أخبرنا.
🧹

لا كليشيه

لا volatile ولا synchronized ولا فحص مزدوج للقيمة الفارغة.

قراءات أسرع

يمكن لـ JVM طي القيمة بعد التهيئة.

صحيح بصورة مُبرهنة

لا أخطاء ترتيب خفية — JVM يتولى الأمر.

الأسلوب القديم
synchronized + volatile
الأسلوب الحديث
StableValue
منذ JDK
25
الصعوبة
متقدم
التهيئة الكسولة بدون أقفال
معاينة

معاينة في JDK 25 (JEP 502، StableValue). يتطلب --enable-preview.

يُغلّف StableValue نمط التهيئة الكسولة مع أمان صحيح للخيوط. يمكن لـ JVM تحسين مسار القراءة بعد التهيئة مما قد يجعله أسرع من قراءات volatile.

مشاركة 𝕏 🦋 in