লক-ফ্রি লেজি ইনিশিয়ালাইজেশন (Lock-free Lazy Initialization)
লেজি ইনিশিয়ালাইজেশনের ক্ষেত্রে ডাবল-চেকড লকিং (double-checked locking) এর পরিবর্তে 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();
}
}
এই কোডে সমস্যা দেখছেন? আমাদের জানান।
কেন আধুনিক পদ্ধতি ভালো
বয়লারপ্লেট (boilerplate) নেই
এখানে volatile, synchronized, বা ডাবল-নাল-চেক করার প্রয়োজন নেই।
দ্রুততর রিড (Faster Reads)
ইনিশিয়ালাইজেশনের পর JVM কনস্ট্যান্ট-ফোল্ড করতে পারে।
প্রমাণিতভাবে সঠিক (Provably Correct)
এখানে কোনো সূক্ষ্ম অর্ডারিং বাগ থাকে না – JVM নিজেই এটি হ্যান্ডেল করে।
পুরনো পদ্ধতি
synchronized + volatile
আধুনিক পদ্ধতি
StableValue
JDK থেকে
25
কঠিনতা
উন্নত
JDK সমর্থন
লক-ফ্রি লেজি ইনিশিয়ালাইজেশন (Lock-free Lazy Initialization)
প্রিভিউ
JDK 25 (JEP 502, StableValue) এ প্রিভিউ। --enable-preview প্রয়োজন।
কীভাবে কাজ করে
StableValue সঠিক থ্রেড সেফটি (thread safety) নিশ্চিত করে লেজি ইনিশিয়ালাইজেশন প্যাটার্নকে এনক্যাপসুলেট (encapsulates) করে। JVM ইনিশিয়ালাইজেশনের পর রিড পাথকে (read path) অপ্টিমাইজ করতে পারে, যা ভলাটাইল রিডের (volatile reads) চেয়ে দ্রুততর হতে পারে।
সম্পর্কিত ডকুমেন্টেশন
প্রমাণ