AtomicReferenceArray Java এর একটি ক্লাস যা atomic operations সহ reference arrays পরিচালনা করার জন্য ব্যবহৃত হয়। এটি java.util.concurrent.atomic প্যাকেজের অংশ, যা মাল্টি-থ্রেডেড প্রোগ্রামিংয়ে ব্যবহৃত হয় এবং থ্রেড-সেফ ডেটা অপারেশন সমর্থন করে।
এই ক্লাসে বিভিন্ন গুরুত্বপূর্ণ মেথড আছে, যেগুলি ডেটা এক্সেস ও আপডেট করার সময় থ্রেড-সেফনেস নিশ্চিত করে। এখানে get(), set(), এবং compareAndSet() মেথডগুলোর বিস্তারিত আলোচনা করা হলো।
১. get(int index) Method
get() মেথড একটি নির্দিষ্ট index থেকে অ্যারের মান পড়ে। এটি একটি থ্রেড-সেফ অপারেশন, অর্থাৎ একাধিক থ্রেড একই অ্যারের একাধিক উপাদান পড়লেও ডেটা সঠিকভাবে রিটার্ন হবে।
সিনট্যাক্স:
public E get(int index)
প্যারামিটার:
- index: অ্যারের index যার মান আপনি পড়তে চান।
রিটার্ন:
- রিটার্ন করে index তে থাকা মান (যে ধরনের অবজেক্ট অ্যারে ধারণ করে)।
উদাহরণ:
AtomicReferenceArray<String> atomicArray = new AtomicReferenceArray<>(5);
atomicArray.set(0, "Hello");
atomicArray.set(1, "World");
String value = atomicArray.get(0);
System.out.println(value); // আউটপুট: Hello
২. set(int index, E newValue) Method
set() মেথড একটি নির্দিষ্ট index তে নতুন মান সেট করে। এই অপারেশনটি atomic এবং থ্রেড-সেফ, অর্থাৎ একাধিক থ্রেড একই সময় একই index এ মান সেট করতে পারবে না।
সিনট্যাক্স:
public void set(int index, E newValue)
প্যারামিটার:
- index: অ্যারের index যেখানে মানটি সেট করতে চান।
- newValue: নতুন মান যা index তে সেট করা হবে।
উদাহরণ:
AtomicReferenceArray<String> atomicArray = new AtomicReferenceArray<>(5);
atomicArray.set(0, "Hello");
atomicArray.set(1, "World");
// নতুন মান সেট করা
atomicArray.set(0, "Hi");
System.out.println(atomicArray.get(0)); // আউটপুট: Hi
৩. compareAndSet(int index, E expect, E update) Method
compareAndSet() একটি atomic অপারেশন যা নির্দিষ্ট index তে expect মানের সাথে তুলনা করে এবং যদি তা মেলে তবে update মান সেট করে। এটি একটি compare-and-swap (CAS) অপারেশন। এটি মাল্টি-থ্রেডেড প্রোগ্রামিংয়ে race condition প্রতিরোধে সহায়ক।
সিনট্যাক্স:
public boolean compareAndSet(int index, E expect, E update)
প্যারামিটার:
- index: অ্যারের index যেটিতে আপনি কাজ করতে চান।
- expect: যেই মানটি index তে উপস্থিত থাকতে হবে, যাতে update মান সেট করা যাবে।
- update: নতুন মান যা expect এর সাথে মিললে index এ সেট হবে।
রিটার্ন:
- true: যদি index তে expect মান মিলে যায় এবং তা সফলভাবে update হয়।
- false: যদি index তে expect মান না মেলে এবং কোন আপডেট না হয়।
উদাহরণ:
AtomicReferenceArray<String> atomicArray = new AtomicReferenceArray<>(5);
atomicArray.set(0, "Hello");
boolean isUpdated = atomicArray.compareAndSet(0, "Hello", "Hi");
System.out.println("Updated: " + isUpdated); // আউটপুট: Updated: true
System.out.println(atomicArray.get(0)); // আউটপুট: Hi
// যদি মান না মেলে
boolean isUpdatedFailed = atomicArray.compareAndSet(0, "World", "Java");
System.out.println("Updated: " + isUpdatedFailed); // আউটপুট: Updated: false
get(), set(), এবং compareAndSet() এর মধ্যে পার্থক্য
get()শুধুমাত্র অ্যারের নির্দিষ্ট index তে থাকা মান পড়ে এবং কোনো পরিবর্তন করে না।set()নির্দিষ্ট index তে একটি নতুন মান সেট করে এবং এটি সরাসরি ডেটাকে আপডেট করে।compareAndSet()প্রথমে একটি expect মানের সাথে তুলনা করে, যদি তা মেলে তবে update মান সেট করা হয়। এটি একটি তুলনা এবং পরিবর্তন (CAS) অপারেশন যা thread-safety নিশ্চিত করে এবং race condition প্রতিরোধে ব্যবহৃত হয়।
AtomicReferenceArray মেথডগুলি যেমন get(), set(), এবং compareAndSet() মাল্টি-থ্রেডেড প্রোগ্রামিংয়ে thread-safe অ্যারের অপারেশন সঞ্চালনে অত্যন্ত কার্যকর।
get()মান পড়ে,set()মান আপডেট করে,compareAndSet()সুনির্দিষ্ট মানের সাথে তুলনা করে এবং শুধু তখনই সেট করে যখন পূর্বের মান মেলে।
এগুলি atomic operations প্রদান করে, যা অ্যারে-এ ডেটার সঠিকতা এবং সুরক্ষা নিশ্চিত করে, বিশেষত যখন একাধিক থ্রেড একই অ্যারে ব্যবহার করে।
Read more