AtomicBoolean হল JavaScript বা Java প্রোগ্রামিং ল্যাঙ্গুয়েজে একটি ক্লাস (বা API), যা atomic operations সম্পাদনের জন্য ব্যবহার করা হয়। এটি boolean টাইপের ডেটার উপর থ্রেড-সেফ অপারেশন নিশ্চিত করে।
যদিও Java তে এটি একটি বিল্ট-ইন ক্লাস, JavaScript-এ এই ধরনের কার্যকারিতা সাধারণত Atomics API ব্যবহার করে করা হয়। এখানে Java এর দৃষ্টিকোণ থেকে AtomicBoolean এবং এর উল্লেখযোগ্য মেথডগুলোর ব্যাখ্যা দেওয়া হলো।
AtomicBoolean এর মূল ধারণা
AtomicBoolean ক্লাস একটি boolean value ধারণ করে এবং এর উপর atomic (indivisible) অপারেশন করার সুযোগ দেয়। এটি multi-threaded environment-এ ডেটা কনসিস্টেন্সি এবং থ্রেড সেফটি নিশ্চিত করে।
Constructor:
AtomicBoolean atomicBoolean = new AtomicBoolean(); // Default value: false
AtomicBoolean atomicBoolean = new AtomicBoolean(true); // Initial value: true
AtomicBoolean Methods
addAndGet()
যদিও addAndGet() সাধারণত সংখ্যাসূচক (numeric) ডেটার জন্য ব্যবহৃত হয়, AtomicBoolean এ এটি নেই কারণ boolean ডেটায় যোগ-বিয়োগের প্রয়োজন নেই।
তবে boolean এর জন্য নিম্নলিখিত মেথডগুলো গুরুত্বপূর্ণ:
get()
get() মেথড বর্তমান boolean মান পড়ে।
AtomicBoolean atomicBoolean = new AtomicBoolean(true);
System.out.println(atomicBoolean.get()); // Output: true
set()
set() মেথড boolean মান নির্ধারণ করে।
AtomicBoolean atomicBoolean = new AtomicBoolean();
atomicBoolean.set(true);
System.out.println(atomicBoolean.get()); // Output: true
compareAndSet(expectedValue, newValue)
এই মেথড নিশ্চিত করে যে, যদি বর্তমান মান expectedValue এর সমান হয়, তাহলে এটি newValue দিয়ে আপডেট হবে। এটি একটি atomic operation।
AtomicBoolean atomicBoolean = new AtomicBoolean(false);
boolean success = atomicBoolean.compareAndSet(false, true);
System.out.println(success); // Output: true
System.out.println(atomicBoolean.get()); // Output: true
getAndSet(newValue)
এই মেথড বর্তমান মানটি রিটার্ন করে এবং একই সময়ে নতুন মান সেট করে।
AtomicBoolean atomicBoolean = new AtomicBoolean(true);
boolean previousValue = atomicBoolean.getAndSet(false);
System.out.println(previousValue); // Output: true
System.out.println(atomicBoolean.get()); // Output: false
lazySet(newValue)
lazySet() মেথডটি নতুন মান সেট করে, তবে এটি অন্য মেথডের মতো সাথে সাথে দৃশ্যমান নয়। এটি performance optimization এর জন্য ব্যবহৃত হয়।
AtomicBoolean atomicBoolean = new AtomicBoolean();
atomicBoolean.lazySet(true);
System.out.println(atomicBoolean.get()); // Output: true
AtomicBoolean ব্যবহার করার প্রয়োজনীয়তা
- Thread-Safe Operations: মাল্টি-থ্রেডেড প্রোগ্রামে boolean ডেটার সঠিকতা বজায় রাখে।
- Race Condition প্রতিরোধ: একাধিক থ্রেড boolean ডেটায় পরিবর্তন করার সময় কনসিস্টেন্সি নিশ্চিত করে।
- Atomicity: প্রতিটি অপারেশন atomic বা অবিভাজ্য হয়, যা ডেটা সুরক্ষা নিশ্চিত করে।
- Lock-Free Mechanism: লক বা মিউটেক্স ছাড়াই কাজ করা যায়।
উদাহরণ: Thread-Safe Boolean Operations
AtomicBoolean isProcessing = new AtomicBoolean(false);
Thread t1 = new Thread(() -> {
if (isProcessing.compareAndSet(false, true)) {
System.out.println("Thread 1: Processing...");
isProcessing.set(false); // Reset value
}
});
Thread t2 = new Thread(() -> {
if (isProcessing.compareAndSet(false, true)) {
System.out.println("Thread 2: Processing...");
isProcessing.set(false); // Reset value
}
});
t1.start();
t2.start();
সারাংশ
AtomicBoolean একটি গুরুত্বপূর্ণ ক্লাস যা boolean ডেটার উপর থ্রেড-সেফ এবং atomic operations নিশ্চিত করে। এর compareAndSet(), getAndSet(), এবং lazySet() এর মতো মেথডগুলো মাল্টি-থ্রেডেড প্রোগ্রামে ডেটার সঠিকতা এবং নিরাপত্তা নিশ্চিত করে। এটি ডেটা ইন্টিগ্রিটি বজায় রেখে concurrency management সহজ করে তোলে।
Read more