AtomicLong হল Java এর একটি ক্লাস, যা java.util.concurrent.atomic প্যাকেজের অন্তর্গত। এটি একটি thread-safe mutable long ভ্যালু প্রদান করে এবং atomic operations (অখণ্ড অপারেশন) সম্পাদনের জন্য ব্যবহৃত হয়। অর্থাৎ, একাধিক থ্রেড একসঙ্গে এই ক্লাসের মেথড ব্যবহার করলেও ডেটার সঠিকতা নিশ্চিত থাকে।
AtomicLong এর সাধারণ মেথডসমূহ
addAndGet(long delta)
- বর্ণনা:
deltaমানটি বর্তমান মানের সাথে যোগ করে এবং নতুন মানটি রিটার্ন করে। - ব্যবহার: এটি এমন ক্ষেত্রে ব্যবহার করা হয় যেখানে ভ্যালু আপডেট করার পরে তার বর্তমান মান জানতে হয়।
উদাহরণ:
AtomicLong atomicLong = new AtomicLong(10); long result = atomicLong.addAndGet(5); // 10 + 5 = 15 System.out.println(result); // আউটপুট: 15
getAndAdd(long delta)
- বর্ণনা:
এটি বর্তমান মানটি রিটার্ন করে এবং তারপরdeltaমানটি বর্তমান মানে যোগ করে। - ব্যবহার: যেখানে আগের মানের প্রয়োজন হয় এবং তারপরে মান পরিবর্তন করতে হয়, সেক্ষেত্রে এটি কার্যকর।
উদাহরণ:
AtomicLong atomicLong = new AtomicLong(10); long result = atomicLong.getAndAdd(5); // আগের মান রিটার্ন করবে: 10 System.out.println(result); // আউটপুট: 10 System.out.println(atomicLong.get()); // নতুন মান: 15
getAndDecrement()
- বর্ণনা:
বর্তমান মানটি রিটার্ন করে এবং তারপর এক (1) বিয়োগ করে। - ব্যবহার: ভ্যালু কমানোর সময় পূর্বের মানের অ্যাক্সেস প্রয়োজন হলে এটি ব্যবহৃত হয়।
উদাহরণ:
AtomicLong atomicLong = new AtomicLong(10); long result = atomicLong.getAndDecrement(); // আগের মান রিটার্ন: 10 System.out.println(result); // আউটপুট: 10 System.out.println(atomicLong.get()); // নতুন মান: 9
decrementAndGet()
- বর্ণনা:
এটি প্রথমে বর্তমান মান থেকে এক (1) বিয়োগ করে এবং তারপর নতুন মানটি রিটার্ন করে। - ব্যবহার: যেখানে পরিবর্তনের পরে নতুন মান প্রয়োজন, সেখানে এটি ব্যবহৃত হয়।
উদাহরণ:
AtomicLong atomicLong = new AtomicLong(10); long result = atomicLong.decrementAndGet(); // নতুন মান: 9 System.out.println(result); // আউটপুট: 9
get()
- বর্ণনা:
এটি বর্তমান মানটি রিটার্ন করে। - ব্যবহার:
বর্তমান মান অ্যাক্সেস করতে ব্যবহৃত হয়। উদাহরণ:
AtomicLong atomicLong = new AtomicLong(10); System.out.println(atomicLong.get()); // আউটপুট: 10
set(long newValue)
- বর্ণনা:
এটি বর্তমান মানকে একটি নির্দিষ্ট মান দিয়ে সেট করে। - ব্যবহার:
বর্তমান মানকে রিসেট করতে ব্যবহৃত হয়। উদাহরণ:
AtomicLong atomicLong = new AtomicLong(10); atomicLong.set(20); System.out.println(atomicLong.get()); // আউটপুট: 20
compareAndSet(long expect, long update)
- বর্ণনা:
যদি বর্তমান মানটিexpectএর সমান হয়, তবে এটিupdateমান দিয়ে সেট করে এবংtrueরিটার্ন করে। অন্যথায়, কিছুই পরিবর্তন করে না এবংfalseরিটার্ন করে। - ব্যবহার:
ডেটার উপর নির্দিষ্ট শর্ত আরোপ করে তা আপডেট করতে ব্যবহৃত হয়। উদাহরণ:
AtomicLong atomicLong = new AtomicLong(10); boolean success = atomicLong.compareAndSet(10, 20); // বর্তমান মান 10 হলে 20 সেট করবে System.out.println(success); // আউটপুট: true System.out.println(atomicLong.get()); // আউটপুট: 20
getAndSet(long newValue)
- বর্ণনা:
এটি বর্তমান মানটি রিটার্ন করে এবং নতুন মান সেট করে। - ব্যবহার:
পূর্বের মান ধরে রেখে নতুন মান আপডেট করতে ব্যবহৃত হয়। উদাহরণ:
AtomicLong atomicLong = new AtomicLong(10); long oldValue = atomicLong.getAndSet(30); // আগের মান: 10 System.out.println(oldValue); // আউটপুট: 10 System.out.println(atomicLong.get()); // নতুন মান: 30
AtomicLong ব্যবহার করার সুবিধা
- Thread Safety: একাধিক থ্রেড ডেটা পরিবর্তন করলেও ডেটার সঠিকতা বজায় থাকে।
- Atomic Operations: প্রতিটি অপারেশন অবিভাজ্য (indivisible) এবং বাধাহীন (non-blocking)।
- Concurrency Optimization: সিঙ্ক্রোনাইজেশন (synchronization) ছাড়াই ডেটা পরিচালনা করতে সাহায্য করে।
উপসংহার
AtomicLong এমন একটি ক্লাস যা মাল্টি-থ্রেডেড প্রোগ্রামিংয়ে ডেটা আপডেট করার সময় ডেটার সঠিকতা এবং নিরাপত্তা নিশ্চিত করে। এর মেথডগুলো ডেটা ম্যানিপুলেশনের ক্ষেত্রে লক-মুক্ত অপারেশন সরবরাহ করে, যা পারফরম্যান্স অপটিমাইজেশনে সহায়ক।
Content added By
Read more