Concurrency উন্নত

volatile বা synchronized ব্যবহার না করেই থ্রেড-সেফ লেজি ইনিশিয়ালাইজেশন (thread-safe lazy initialization) বাস্তবায়ন করুন।

✕ 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();
}
এই কোডে সমস্যা দেখছেন? আমাদের জানান।
🧹

জিরো বয়লারপ্লেট (Zero Boilerplate)

কোনো volatile, synchronized, বা null চেক করার প্রয়োজন নেই।

JVM-অপ্টিমাইজড

ইনিশিয়ালাইজেশনের পর JVM ভ্যালুটিকে কনস্ট্যান্ট-ফোল্ড করতে পারে।

🛡️

একবার নিশ্চিত (Guaranteed Once)

সাপ্লায়ার (supplier) কেবল একবারই রান করে, এমনকি কনটেনশনের (contention) মধ্যেও।

পুরনো পদ্ধতি
ডাবল-চেকড লকিং (Double-Checked Locking)
আধুনিক পদ্ধতি
StableValue
JDK থেকে
25
কঠিনতা
উন্নত
স্টেবল ভ্যালু (Stable Values)
প্রিভিউ

JDK 25 (JEP 502) এ প্রিভিউ। --enable-preview প্রয়োজন।

StableValue বিল্ট-ইন থ্রেড সেফটি সহ একটি লেজি ইনিশিয়ালাইজড, ইমিউটেবল ভ্যালু প্রদান করে। এখানে ডাবল-চেকড লকিং, volatile ফিল্ড বা synchronized ব্লকের প্রয়োজন নেই। এমনকি JVM ইনিশিয়ালাইজেশনের পর রিড পাথকে (read path) অপ্টিমাইজও করতে পারে।