কম্পিউটার টিউটোরিয়াল

জাভাতে ReentrantLock এবং Synchronized-এর পার্থক্য

শেয়ার্ড রিসোর্সে একাধিক থ্রেড দ্বারা লক পাওয়ার দুটি পদ্ধতি রয়েছে: ReentrantLock (বা ReadWriteLock) এবং synchronized মেথড/ব্লক। ReentrantLock ক্লাস জাভা ৫ থেকে java.util.concurrent প্যাকেজে উপলব্ধ। এটি Lock ইন্টারফেসের ইমপ্লিমেন্টেশন এবং জাভা ডকস অনুযায়ী, Lock ইন্টারফেস synchronized মেথডের চেয়ে অধিক ব্যাপক অপারেশন প্রদান করে।

ReentrantLock এবং Synchronized-এর তুলনা

ক্রমিক নং বিষয় ReentrantLock Synchronized
১ লক অধিগ্রহণ lock() মেথড ব্যবহার করে থ্রেড শেয়ার্ড রিসোর্সে লক পায় synchronized কীওয়ার্ড লিখলেই লক পাওয়া যায়
২ লক মুক্তি প্রোগ্রামারকে unlock() মেথড কল করতে হয় অনুচ্ছেদ শেষ হলে অপরিহার্যভাবে মুক্তি পায়
৩ ইন্টারাপ্ট ক্ষমতা lockInterruptibly() মেথড দিয়ে থ্রেড ইন্টারাপ্ট করা যায় থ্রেড ইন্টারাপ্ট করার কোনো উপায় নেই
৪ ন্যায়সঙ্গতা (Fairness) কনস্ট্রাক্টরে fairness প্যারামিটার থাকে। true হলে দীর্ঘসময় অপেক্ষা কর रहे থ্রেডকে প্রাধান্য দেয় লক কোনো নির্দিষ্ট অ্যাক্সেস অর্ডার গ্যারান্টি দেয় না
৫ লক রিলিজ অর্ডার যে কোনো ক্রমে লক রিলিজ করা যায় লক অর্জনের ক্রমেই রিলিজ করতে হয়

ReentrantLock উদাহরণ

public class ReentrantLockExample implements Runnable {
    private Lock lock = new ReentrantLock();
    
    @Override
    public void run() {
        try {
            lock.lock();
            // শেয়ার্ড রিসোর্স লক করা
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            lock.unlock();
        }
    }
}

Synchronized উদাহরণ

public class SynchronizedLockExample implements Runnable {
    @Override
    public void run() {
        synchronized (resource) {
            // শেয়ার্ড রিসোর্স লক করা
        }
    }
}

কোনটি ব্যবহার করবেন?

  • Synchronized: সাদা লকিংয়ের জন্য, কোড ক্লিন রাখতে
  • ReentrantLock: উন্নত ফিচার দরকার হলে (fairness, interruptibility, tryLock, condition variables)
  1. জাভাতে Serialization এবং Externalization-এর পার্থক্য

  2. জাভাতে ConcurrentHashMap এবং Synchronized HashMap-এর পার্থক্য

  3. জাভাতে Iterator এবং Enumeration-এর পার্থক্য

  4. জাভাতে ArrayList এবং HashSet-এর পার্থক্য