জাভা কনকারেন্সি হলো মাল্টিথ্রেডিং এবং সিঙ্ক্রোনাইজড প্রোগ্রামিংয়ের জন্য একটি শক্তিশালী প্যাকেজ (java.util.concurrent)। এটি ডেটা শেয়ারিং এবং থ্রেডের মধ্যে সমন্বয় পরিচালনার জন্য কার্যকরী টুলস প্রদান করে।
DelayQueue
DelayQueue কী?
DelayQueueহলো একটি ব্লকিং কিউ যাDelayedইন্টারফেস ইমপ্লিমেন্ট করা অবজেক্ট রাখে।- অবজেক্টগুলো নির্দিষ্ট সময় পর কিউ থেকে তোলা যায়।
- এটি টাইম-সেন্সিটিভ টাস্ক প্রসেসিংয়ের জন্য আদর্শ।
ব্যবহার:
- Task Scheduling: নির্দিষ্ট সময় পরে কোনো টাস্ক চালানোর জন্য।
- Caching: অবজেক্টের টাইম টু লাইভ (TTL) ম্যানেজ করতে।
উদাহরণ:
import java.util.concurrent.*;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
class DelayedTask implements Delayed {
private final String name;
private final long startTime;
public DelayedTask(String name, long delayInMillis) {
this.name = name;
this.startTime = System.currentTimeMillis() + delayInMillis;
}
@Override
public long getDelay(TimeUnit unit) {
return unit.convert(startTime - System.currentTimeMillis(), TimeUnit.MILLISECONDS);
}
@Override
public int compareTo(Delayed o) {
return Long.compare(this.getDelay(TimeUnit.MILLISECONDS), o.getDelay(TimeUnit.MILLISECONDS));
}
@Override
public String toString() {
return "Task{name='" + name + "'}";
}
}
public class DelayQueueExample {
public static void main(String[] args) throws InterruptedException {
DelayQueue<DelayedTask> queue = new DelayQueue<>();
// Adding tasks
queue.put(new DelayedTask("Task1", 2000));
queue.put(new DelayedTask("Task2", 4000));
queue.put(new DelayedTask("Task3", 1000));
// Processing tasks
while (!queue.isEmpty()) {
DelayedTask task = queue.take(); // Waits until the delay expires
System.out.println("Processed: " + task);
}
}
}
PriorityBlockingQueue
PriorityBlockingQueue কী?
PriorityBlockingQueueহলো একটি থ্রেড-সেফ ব্লকিং কিউ যা এলিমেন্টগুলোকে তাদের প্রায়োরিটির ভিত্তিতে সাজায়।Comparableইন্টারফেস বাComparatorএর মাধ্যমে প্রায়োরিটি নির্ধারণ করা হয়।
ব্যবহার:
- Task Priority Management: উচ্চ-প্রায়োরিটির টাস্ক আগে প্রসেস করতে।
- Job Scheduling: মাল্টি-জব ম্যানেজমেন্ট সিস্টেমে।
উদাহরণ:
import java.util.concurrent.*;
public class PriorityBlockingQueueExample {
public static void main(String[] args) throws InterruptedException {
PriorityBlockingQueue<String> queue = new PriorityBlockingQueue<>();
// Adding elements
queue.put("Low Priority");
queue.put("High Priority");
queue.put("Medium Priority");
// Retrieving elements (Natural Order or Comparable)
while (!queue.isEmpty()) {
System.out.println("Processed: " + queue.take());
}
}
}
SynchronousQueue
SynchronousQueue কী?
SynchronousQueueএকটি বিশেষ ধরনের ব্লকিং কিউ, যেখানে কোনো স্টোরেজ ক্ষমতা নেই। প্রতিটিput()মেথডের জন্য একটিtake()কল থাকা আবশ্যক।- এটি direct handoff করার জন্য ব্যবহৃত হয়।
ব্যবহার:
- Thread Communication: প্রোডিউসার এবং কনজিউমারের মধ্যে সরাসরি ডেটা শেয়ার।
- Load Balancing: একাধিক থ্রেডের মধ্যে কাজ ভাগাভাগি করতে।
উদাহরণ:
import java.util.concurrent.*;
public class SynchronousQueueExample {
public static void main(String[] args) {
SynchronousQueue<String> queue = new SynchronousQueue<>();
// Producer Thread
new Thread(() -> {
try {
System.out.println("Putting: Task1");
queue.put("Task1");
System.out.println("Putting: Task2");
queue.put("Task2");
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
// Consumer Thread
new Thread(() -> {
try {
System.out.println("Taken: " + queue.take());
System.out.println("Taken: " + queue.take());
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
}
}
কনকারেন্সি টুলসের তুলনা
| Queue Type | Use Case | Blocking Behavior |
|---|---|---|
DelayQueue | টাইম-বেজড টাস্ক শিডিউলিং। | ডেটা তখনই অ্যাক্সেসযোগ্য যখন টাইম এক্সপায়ার। |
PriorityBlockingQueue | প্রায়োরিটি বেসড ডেটা প্রসেসিং। | ব্লক হয় না; সর্বোচ্চ প্রায়োরিটি এলিমেন্ট আগে প্রসেস হয়। |
SynchronousQueue | প্রোডিউসার-কনজিউমার সরাসরি ডেটা শেয়ারিং। | প্রতিটি put() এর জন্য একটি take() প্রয়োজন। |
DelayQueueনির্দিষ্ট সময় পর টাস্ক প্রসেস করার জন্য।PriorityBlockingQueueপ্রায়োরিটি নির্ভর ডেটা প্রসেসিংয়ে।SynchronousQueueথ্রেডের মধ্যে ডেটা আদান-প্রদানে। জাভার কনকারেন্সি টুলস সঠিকভাবে ব্যবহার করলে মাল্টিথ্রেডেড অ্যাপ্লিকেশন আরও কার্যকর এবং নির্ভরযোগ্য হয়।
Content added By
Read more