ReadWriteLock এবং তার ব্যবহার

Synchronization এবং Locks - জাভা কনকারেন্সি (Java Concurrency) - Java Technologies

314

ReadWriteLock হল জাভার java.util.concurrent.locks প্যাকেজের একটি ইন্টারফেস, যা এমন পরিস্থিতিতে ব্যবহৃত হয় যেখানে একাধিক থ্রেড ডেটা পড়তে পারে (read), কিন্তু শুধুমাত্র একটি থ্রেড ডেটা পরিবর্তন (write) করতে পারে। এটি একযোগে পড়া এবং ডেটা আপডেট করার মধ্যে সঠিক সমন্বয় (synchronization) নিশ্চিত করে।


ReadWriteLock এর ভূমিকা

  1. একাধিক পাঠক থ্রেড (Multiple Reader Threads): একাধিক থ্রেড একই সময়ে ডেটা পড়তে পারে।
  2. একক লেখক থ্রেড (Single Writer Thread): এক সময়ে শুধুমাত্র একটি থ্রেড ডেটা পরিবর্তন করতে পারে।
  3. লেখা-পড়ার সংঘাত প্রতিরোধ: লেখার সময় পড়া থ্রেড বন্ধ করে দেয়।

ReadWriteLock এর মূল মেথড

ReadWriteLock ইন্টারফেস দুটি লক সরবরাহ করে:

  1. readLock(): ডেটা পড়ার জন্য লক।
  2. writeLock(): ডেটা লেখার জন্য লক।

ReadWriteLock ব্যবহার: উদাহরণ

১. ReadWriteLock এর ব্যবহার দেখানো উদাহরণ

import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

class SharedData {
    private int data = 0; // শেয়ারড ডেটা
    private final ReadWriteLock lock = new ReentrantReadWriteLock();

    // ডেটা পড়ার জন্য
    public int read() {
        lock.readLock().lock(); // Read lock নিন
        try {
            System.out.println(Thread.currentThread().getName() + " is reading: " + data);
            return data;
        } finally {
            lock.readLock().unlock(); // Read lock ছেড়ে দিন
        }
    }

    // ডেটা লেখার জন্য
    public void write(int value) {
        lock.writeLock().lock(); // Write lock নিন
        try {
            System.out.println(Thread.currentThread().getName() + " is writing: " + value);
            this.data = value;
        } finally {
            lock.writeLock().unlock(); // Write lock ছেড়ে দিন
        }
    }
}

public class ReadWriteLockExample {
    public static void main(String[] args) {
        SharedData sharedData = new SharedData();

        // Reader Threads
        Runnable readerTask = () -> {
            for (int i = 0; i < 5; i++) {
                sharedData.read();
                try {
                    Thread.sleep(100); // সামান্য বিরতি
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };

        // Writer Thread
        Runnable writerTask = () -> {
            for (int i = 0; i < 5; i++) {
                sharedData.write(i);
                try {
                    Thread.sleep(200); // সামান্য বিরতি
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };

        // থ্রেড তৈরি
        Thread reader1 = new Thread(readerTask, "Reader 1");
        Thread reader2
Content added By
Promotion

Are you sure to start over?

Loading...