কনকারেন্সি হলো একাধিক কাজ বা অপারেশন একসাথে (প্যারালাল বা ওভারল্যাপিং) করার ক্ষমতা। এটি এমন একটি মডেল যা একাধিক থ্রেড ব্যবহার করে একই সময়ে বিভিন্ন কাজ কার্যকর করতে পারে।
জাভা কনকারেন্সি ফ্রেমওয়ার্ক (Java Concurrency Framework) এমন একটি সেট টুল এবং ক্লাসের সমন্বয়, যা কনকারেন্ট (একসাথে) প্রোগ্রাম তৈরি করতে সাহায্য করে।
কনকারেন্সি কী?
কনকারেন্সি এমন একটি মডেল যেখানে:
- একাধিক থ্রেড বা প্রসেস: বিভিন্ন কাজ একসাথে চালায়।
- শেয়ার্ড রিসোর্স ম্যানেজমেন্ট: একাধিক থ্রেড একই ডেটা বা রিসোর্স শেয়ার করে।
- কন্টেক্সট সুইচিং: থ্রেডগুলোকে দ্রুত সুইচ করার মাধ্যমে কাজগুলি সম্পন্ন করা হয়।
জাভা কনকারেন্সি কেন প্রয়োজন?
১. পারফরম্যান্স উন্নয়ন (Performance Improvement):
মাল্টি-কোর প্রসেসরের পুরো শক্তি ব্যবহার করার মাধ্যমে জাভা কনকারেন্সি অ্যাপ্লিকেশনের পারফরম্যান্স বাড়ায়।
২. রেসপন্সিভ ইউজার ইন্টারফেস:
দীর্ঘস্থায়ী কাজগুলো (যেমন ডাটা প্রসেসিং বা নেটওয়ার্ক কল) ব্যাকগ্রাউন্ডে চালিয়ে রেখে ইউজার ইন্টারফেস রেসপন্সিভ রাখা সম্ভব।
৩. রিসোর্সের কার্যকর ব্যবহার:
সিপিইউ এবং মেমোরি ব্যবহার আরো কার্যকরভাবে পরিচালনা করা যায়।
৪. ডিসেন্ট্রালাইজড অপারেশনস:
জাভা কনকারেন্সি একই সময়ে বিভিন্ন কার্যক্রম বা ট্রানজ্যাকশন চালাতে দেয়, যা বড় সিস্টেমের জন্য অপরিহার্য।
৫. প্যারালাল প্রোগ্রামিং:
ডেটা প্রসেসিং বা ম্যাসিভ ক্যালকুলেশন দ্রুত সম্পন্ন করতে প্যারালাল থ্রেড ব্যবহার করা হয়।
জাভা কনকারেন্সি প্রযুক্তি (Java Technologies for Concurrency)
১. থ্রেড (Thread):
জাভা থ্রেড হলো ছোটতম ইউনিট যা কোডকে একসাথে চালাতে পারে।
২. java.util.concurrent প্যাকেজ:
কনকারেন্সি ম্যানেজমেন্টের জন্য উন্নত টুলস সরবরাহ করে, যেমন:
- Executor Framework (থ্রেড ম্যানেজমেন্ট সহজ করার জন্য)
- Locks (শেয়ার্ড রিসোর্স নিয়ন্ত্রণ করার জন্য)
- Concurrent Collections (থ্রেড-সেফ ডেটা স্ট্রাকচার)
৩. সিঙ্ক্রোনাইজেশন (Synchronization):
শেয়ার্ড রিসোর্সের সাথে একাধিক থ্রেড কাজ করার সময় ডেটা ইনকনসিস্টেন্সি এড়াতে ব্যবহৃত হয়।
৪. ফিউচার এবং কমপ্লিটেবল ফিউচার (Future and CompletableFuture):
অ্যাসিনক্রোনাস টাস্ক পরিচালনা এবং তাদের ফলাফল পুনরুদ্ধার করতে ব্যবহৃত হয়।
৫. ফর্ক-জয় ফ্রেমওয়ার্ক (Fork-Join Framework):
বড় কাজগুলো ছোট টাস্কে ভাগ করে প্যারালাল প্রক্রিয়াজাত করার জন্য।
জাভা কনকারেন্সি উদাহরণ
১. সাধারণ থ্রেড ব্যবহার:
class MyThread extends Thread {
public void run() {
System.out.println("Thread is running: " + Thread.currentThread().getName());
}
}
public class ThreadExample {
public static void main(String[] args) {
MyThread thread1 = new MyThread();
MyThread thread2 = new MyThread();
thread1.start();
thread2.start();
}
}
২. Runnable Interface ব্যবহার:
class MyRunnable implements Runnable {
public void run() {
System.out.println("Thread is running: " + Thread.currentThread().getName());
}
}
public class RunnableExample {
public static void main(String[] args) {
Thread thread1 = new Thread(new MyRunnable());
Thread thread2 = new Thread(new MyRunnable());
thread1.start();
thread2.start();
}
}
৩. Executor Framework ব্যবহার:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ExecutorExample {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(3);
Runnable task = () -> {
System.out.println("Task executed by: " + Thread.currentThread().getName());
};
for (int i = 0; i < 5; i++) {
executor.execute(task);
}
executor.shutdown();
}
}
৪. Future এবং CompletableFuture উদাহরণ:
import java.util.concurrent.CompletableFuture;
public class CompletableFutureExample {
public static void main(String[] args) {
CompletableFuture.supplyAsync(() -> {
return "Hello, Concurrency!";
}).thenAccept(result -> {
System.out.println("Result: " + result);
}).join();
}
}
সতর্কতা: কনকারেন্সি ব্যবহারের চ্যালেঞ্জ
- ডেডলক (Deadlock):
একাধিক থ্রেড একে অপরের রিসোর্সের জন্য অপেক্ষা করলে ডেডলক হয়। - রেস কন্ডিশন (Race Condition):
একাধিক থ্রেড একই ডেটা নিয়ে কাজ করার সময় ইনকনসিস্টেন্সি ঘটে। - স্টারভেশন এবং লাইভলক (Starvation and Livelock):
কোনো থ্রেড পর্যাপ্ত রিসোর্স না পেলে বা থ্রেডগুলোর মধ্যে পারস্পরিক নির্ভরশীলতা তৈরি হলে ঘটে।
জাভা কনকারেন্সি একটি শক্তিশালী এবং প্রয়োজনীয় টুল, বিশেষত যেখানে বড় অ্যাপ্লিকেশন বা পারফরম্যান্স-সেন্সিটিভ কাজের প্রয়োজন। তবে, এটি ব্যবহার করার সময় যথাযথ ডিজাইন এবং যাচাই জরুরি, যাতে ডেডলক বা রেস কন্ডিশনের মতো সমস্যাগুলো এড়ানো যায়।
Read more