Concurrency متقدم

تهيئة كسولة آمنة للخيوط دون volatile أو synchronized.

✕ Java 8
private volatile Logger logger;
Logger getLogger() {
    if (logger == null) {
        synchronized (this) {
            if (logger == null)
                logger = createLogger();
        }
    }
    return logger;
}
✓ Java 25 (Preview)
private final StableValue<Logger> logger =
    StableValue.of(this::createLogger);

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

صفر كليشيه

لا volatile ولا synchronized ولا فحوصات null.

مُحسَّن من JVM

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

🛡️

مضمون مرة واحدة

المورّد يعمل مرة واحدة بالضبط حتى في حال التنافس.

الأسلوب القديم
القفل المزدوج
الأسلوب الحديث
StableValue
منذ JDK
25
الصعوبة
متقدم
القيم الثابتة
معاينة

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

يوفر StableValue قيمةً مُهيَّأةً كسولاً وثابتةً مع أمان مدمج للخيوط. لا قفل مزدوج ولا حقول volatile ولا كتل synchronized. يمكن لـ JVM حتى تحسين مسار القراءة بعد التهيئة.

مشاركة 𝕏 🦋 in