تهيئة كسولة آمنة للخيوط دون 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
القيم الثابتة
معاينة
معاينة في JDK 25 (JEP 502). يتطلب --enable-preview.
كيف يعمل
يوفر StableValue قيمةً مُهيَّأةً كسولاً وثابتةً مع أمان مدمج للخيوط. لا قفل مزدوج ولا حقول volatile ولا كتل synchronized. يمكن لـ JVM حتى تحسين مسار القراءة بعد التهيئة.
توثيق ذو صلة