DelayQueue এবং PriorityBlockingQueue হল জাভার কনকারেন্সি ফ্রেমওয়ার্কে ব্যবহৃত বিশেষধরনের BlockingQueue। এদের ভূমিকা এবং ব্যবহারের উপায় নিচে বিস্তারিতভাবে ব্যাখ্যা করা হলো।
DelayQueue
DelayQueue হলো একটি ব্লকিং কিউ, যা এমন ডেটা সংরক্ষণ করে যেগুলো নির্দিষ্ট সময় পর অ্যাক্সেসযোগ্য হয়। এটি Delayed ইন্টারফেস ব্যবহার করে কাজ করে।
বৈশিষ্ট্য:
- Time-based delay: প্রতিটি আইটেম নির্দিষ্ট সময়ের জন্য কিউতে থাকবে।
- থ্রেড-সেফ: একাধিক থ্রেড একযোগে কিউ থেকে উপাদান পড়তে বা যোগ করতে পারে।
- Delayed ইন্টারফেস: কিউর উপাদানগুলোতে
getDelay()মেথড প্রয়োগ করতে হয়।
DelayQueue উদাহরণ
একটি মেসেজ ডেলিভারি সিস্টেম যেখানে মেসেজ নির্দিষ্ট সময়ে ডেলিভার হবে।
import java.util.concurrent.DelayQueue;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
// Delayed ইন্টারফেস ইমপ্লিমেন্ট করা ক্লাস
class DelayedMessage implements Delayed {
private final String message;
private final long startTime;
public DelayedMessage(String message, long delayInMillis) {
this.message = message;
this.startTime = System.currentTimeMillis() + delayInMillis;
}
@Override
public long getDelay(TimeUnit unit) {
long remainingTime = startTime - System.currentTimeMillis();
return unit.convert(remainingTime, TimeUnit.MILLISECONDS);
}
@Override
public int compareTo(Delayed o) {
if (this.startTime < ((DelayedMessage) o).startTime) {
return -1;
}
if (this.startTime > ((DelayedMessage) o).startTime) {
return 1;
}
return 0;
}
@Override
public String toString() {
return "Message: " + message + ", Start Time: " + startTime;
}
}
public class DelayQueueExample {
public static void main(String[] args) throws InterruptedException {
DelayQueue<DelayedMessage> delayQueue = new DelayQueue<>();
// মেসেজ যোগ করা
delayQueue.put(new DelayedMessage("Message 1", 3000)); // ৩ সেকেন্ড বিলম্ব
delayQueue.put(new DelayedMessage("Message 2", 5000)); // ৫ সেকেন্ড বিলম্ব
System.out.println("Messages are being processed...");
// মেসেজ প্রসেস করা
while (!delayQueue.isEmpty()) {
DelayedMessage message = delayQueue.take(); // ব্লকিং কল
System.out.println("Processed: " + message);
}
System.out.println("All messages processed.");
}
}
আউটপুট:
- প্রথম মেসেজ ৩ সেকেন্ড পরে প্রসেস হবে।
- দ্বিতীয় মেসেজ ৫ সেকেন্ড পরে প্রসেস হবে।
PriorityBlockingQueue
PriorityBlockingQueue হলো একটি ব্লকিং কিউ যা PriorityQueue এর থ্রেড-সেফ সংস্করণ। এটি উপাদানগুলোকে প্রাক-সংজ্ঞায়িত natural order বা কাস্টম কম্পারেটর অনুযায়ী সাজিয়ে রাখে।
বৈশিষ্ট্য:
- Natural Ordering বা Custom Comparator: উপাদানগুলি তাদের প্রাকৃতিক অর্ডার বা নির্ধারিত কম্পারেটর অনুযায়ী সাজানো হয়।
- থ্রেড-সেফ: একাধিক থ্রেড থেকে উপাদান যোগ বা পড়া যায়।
- নন-ব্লকিং poll(): যদি কিউ খালি হয়, তবে
poll()মেথড তাৎক্ষণিকভাবেnullরিটার্ন করবে।
PriorityBlockingQueue উদাহরণ
প্রতিটি কাজকে একটি প্রায়োরিটি দিয়ে কিউতে সংরক্ষণ ও প্রসেস করা।
import java.util.concurrent.PriorityBlockingQueue;
// টাস্ক ক্লাস যার একটি প্রায়োরিটি থাকবে
class Task implements Comparable<Task> {
private final String name;
private final int priority;
public Task(String name, int priority) {
this.name = name;
this.priority = priority;
}
@Override
public int compareTo(Task other) {
return Integer.compare(this.priority, other.priority); // Priority অনুযায়ী তুলনা
}
@Override
public String toString() {
return "Task{name='" + name + "', priority=" + priority + '}';
}
}
public class PriorityBlockingQueueExample {
public static void main(String[] args) throws InterruptedException {
PriorityBlockingQueue<Task> priorityQueue = new PriorityBlockingQueue<>();
// কাজ যোগ করা
priorityQueue.put(new Task("Low Priority Task", 3));
priorityQueue.put(new Task("High Priority Task", 1));
priorityQueue.put(new Task("Medium Priority Task", 2));
System.out.println("Tasks are being processed...");
// কাজ প্রসেস করা
while (!priorityQueue.isEmpty()) {
Task task = priorityQueue.take(); // ব্লকিং কল
System.out.println("Processed: " + task);
}
System.out.println("All tasks processed.");
}
}
আউটপুট:
- High Priority Task (priority=1) প্রথম প্রসেস হবে।
- Medium Priority Task (priority=2) দ্বিতীয়।
- Low Priority Task (priority=3) সর্বশেষ।
DelayQueue এবং PriorityBlockingQueue এর তুলনা
| বৈশিষ্ট্য | DelayQueue | PriorityBlockingQueue |
|---|---|---|
| মূল বৈশিষ্ট্য | নির্দিষ্ট সময় পরে উপাদান প্রসেস করে | উপাদান প্রায়োরিটি অনুযায়ী প্রসেস করে |
| ডেটা অর্ডারিং | সময়-ভিত্তিক | প্রায়োরিটি বা natural order |
| ব্যবহার ক্ষেত্র | ডেলেইড মেসেজ সিস্টেম | কাজের প্রায়োরিটি ভিত্তিক শিডিউলিং |
| থ্রেড-সেফ | হ্যাঁ | হ্যাঁ |
- DelayQueue: সময় ভিত্তিক কাজ বা মেসেজ ডেলিভারির জন্য ব্যবহার করুন।
- PriorityBlockingQueue: প্রায়োরিটি ভিত্তিক কাজের শিডিউলিংয়ের জন্য উপযুক্ত।
এই কিউগুলো মাল্টিথ্রেডেড পরিবেশে ডেটা ম্যানেজমেন্টকে সহজ ও কার্যকর করে।
Read more