স্টেবল ভ্যালু (Stable Values)
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
কঠিনতা
উন্নত
JDK সমর্থন
স্টেবল ভ্যালু (Stable Values)
প্রিভিউ
JDK 25 (JEP 502) এ প্রিভিউ। --enable-preview প্রয়োজন।
কীভাবে কাজ করে
StableValue বিল্ট-ইন থ্রেড সেফটি সহ একটি লেজি ইনিশিয়ালাইজড, ইমিউটেবল ভ্যালু প্রদান করে। এখানে ডাবল-চেকড লকিং, volatile ফিল্ড বা synchronized ব্লকের প্রয়োজন নেই। এমনকি JVM ইনিশিয়ালাইজেশনের পর রিড পাথকে (read path) অপ্টিমাইজও করতে পারে।
সম্পর্কিত ডকুমেন্টেশন
প্রমাণ