Java এর Concurrency Tools
Java এ সমান্তরাল প্রোগ্রামিংয়ের জন্য বিভিন্ন টুল এবং লাইব্রেরি রয়েছে, যা থ্রেড ম্যানেজমেন্ট, সিঙ্ক্রোনাইজেশন, এবং অন্যান্য সমান্তরাল কার্যকলাপ সহজ করতে সহায়ক। নিচে কিছু গুরুত্বপূর্ণ concurrency tools এবং তাদের উদাহরণ দেওয়া হলো।
১. Thread Class
বর্ণনা: Java এর Thread ক্লাস ব্যবহার করে একটি নতুন থ্রেড তৈরি করা যায়। এটি Runnable ইন্টারফেসের সাহায্যে কার্যকরী কোড পরিচালনা করে।
উদাহরণ:
class MyThread extends Thread {
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("Thread: " + i);
try {
Thread.sleep(500); // 500 মিলিসেকেন্ডের জন্য ঘুমিয়ে থাকা
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class ThreadExample {
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start(); // থ্রেড শুরু
}
}
২. Runnable Interface
বর্ণনা: Runnable ইন্টারফেস একটি উপায় যা থ্রেড তৈরি করার জন্য ব্যবহার করা হয়। এটি run() মেথডের মাধ্যমে কার্যকরী কোড সরবরাহ করে।
উদাহরণ:
class MyRunnable implements Runnable {
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("Runnable: " + i);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class RunnableExample {
public static void main(String[] args) {
Thread thread = new Thread(new MyRunnable());
thread.start();
}
}
৩. Executor Framework
বর্ণনা: Java এর Executor ফ্রেমওয়ার্ক থ্রেড পরিচালনা এবং কাজের জন্য একটি উচ্চ স্তরের API প্রদান করে। এটি থ্রেড তৈরি এবং পরিচালনার প্রক্রিয়া সহজ করে।
উদাহরণ:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
class Task implements Runnable {
public void run() {
System.out.println("Task executed by: " + Thread.currentThread().getName());
}
}
public class ExecutorExample {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(3); // থ্রেড পুল তৈরি
for (int i = 0; i < 5; i++) {
executor.execute(new Task()); // কাজ সম্পাদন করা
}
executor.shutdown(); // থ্রেড পুল বন্ধ করা
}
}
৪. Synchronized Blocks
বর্ণনা: Synchronized ব্লক ব্যবহার করে, আপনি শেয়ারড রিসোর্সে অ্যাক্সেস নিয়ন্ত্রণ করতে পারেন। এটি থ্রেড নিরাপত্তা নিশ্চিত করে।
উদাহরণ:
class Counter {
private int count = 0;
public synchronized void increment() { // সিঙ্ক্রোনাইজড মেথড
count++;
}
public int getCount() {
return count;
}
}
public class SyncExample {
public static void main(String[] args) throws InterruptedException {
Counter counter = new Counter();
Thread thread1 = new Thread(() -> {
for (int i = 0; i < 1000; i++) {
counter.increment();
}
});
Thread thread2 = new Thread(() -> {
for (int i = 0; i < 1000; i++) {
counter.increment();
}
});
thread1.start();
thread2.start();
thread1.join();
thread2.join();
System.out.println("Final Count: " + counter.getCount()); // সঠিক ফলাফল
}
}
৫. CountDownLatch
বর্ণনা: CountDownLatch একটি সমান্তরাল পদ্ধতি যা একটি থ্রেডকে অপেক্ষা করতে দেয় যতক্ষণ না অন্য এক বা একাধিক থ্রেড কাজ সম্পন্ন করে।
উদাহরণ:
import java.util.concurrent.CountDownLatch;
class Worker implements Runnable {
private CountDownLatch latch;
public Worker(CountDownLatch latch) {
this.latch = latch;
}
public void run() {
System.out.println(Thread.currentThread().getName() + " is working...");
try {
Thread.sleep(2000); // কাজের সময়
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
latch.countDown(); // কাজ সম্পন্ন হলে ল্যাচ কমান
}
}
}
public class CountDownLatchExample {
public static void main(String[] args) throws InterruptedException {
CountDownLatch latch = new CountDownLatch(3); // 3 থ্রেডের জন্য ল্যাচ
for (int i = 0; i < 3; i++) {
new Thread(new Worker(latch)).start();
}
latch.await(); // সমস্ত কাজ সম্পন্ন হওয়া পর্যন্ত অপেক্ষা
System.out.println("All workers have finished!");
}
}
উপসংহার
Java এর concurrency tools থ্রেড ম্যানেজমেন্ট, সিঙ্ক্রোনাইজেশন, এবং অন্যান্য সমান্তরাল কার্যকলাপ সহজ করতে সহায়ক। এগুলি সমান্তরাল প্রোগ্রামিংয়ের জন্য শক্তিশালী এবং কার্যকরী পদ্ধতি সরবরাহ করে, যা সফটওয়্যার ডেভেলপমেন্টকে আরও কার্যকর এবং গতিশীল করে তোলে।
Read more