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

জাভাতে কালেকশনকে থ্রেড-সেফ কীভাবে করবেন?

java.util.Collections ক্লাসে কালেকশন নিয়ে কাজ করার জন্য বিভিন্ন পলিমরফিক এলগরিদম সহיטת মেথড রয়েছে। এই ক্লাসটি বিভিন্ন টাইপের কালেকশনকে থ্রেড-সেফ (সিঙ্ক্রোনাইজড) করার জন্য synchronizedXxx() মেথডগুলো প্রদান করে।

প্রধান সিঙ্ক্রোনাইজড মেথডসমূহ

ক্রমমেথড ও বর্ণনা
1static <T> Collection<T> synchronizedCollection(Collection<T> c)
যেকোনো কালেকশন অবজেক্ট গ্রহণ করে এবং একটি সিঙ্ক্রোনাইজড (থ্রেড-সেফ) কালেকশন রিটার্ন করে।
2static <T> List<T> synchronizedList(List<T> list)
List ইন্টারফেসের অবজেক্ট গ্রহণ করে একটি সিঙ্ক্রোনাইজড লিস্ট রিটার্ন করে।
3static <K,V> Map<K,V> synchronizedMap(Map<K,V> m)
Map ইন্টারফেসের অবজেক্ট গ্রহণ করে একটি সিঙ্ক্রোনাইজড ম্যাপ রিটার্ন করে।
4static <T> Set<T> synchronizedSet(Set<T> s)
Set ইন্টারফেসের অবজেক্ট গ্রহণ করে একটি সিঙ্ক্রোনাইজড সেট রিটার্ন করে।
5static <K,V> SortedMap<K,V> synchronizedSortedMap(SortedMap<K,V> m)
SortedMap ইন্টারফেসের অবজেক্ট গ্রহণ করে একটি সিঙ্ক্রোনাইজড সোর্টেড ম্যাপ রিটার্ন করে।
6static <T> SortedSet<T> synchronizedSortedSet(SortedSet<T> s)
SortedSet ইন্টারফেসের অবজেক্ট গ্রহণ করে একটি সিঙ্ক্রোনাইজড সোর্টেড সেট রিটার্ন করে।

উদাহরণ

import java.util.Collection;
import java.util.Collections;
import java.util.Vector;

public class CollectionReadOnly {
    public static void main(String[] args) {
        Vector<String> vector = new Vector<String>();
        vector.add("JavaFx");
        vector.add("Java");
        vector.add("WebGL");
        vector.add("OpenCV");
        System.out.println(vector);
        
        Collection<String> synchronizedVector = Collections.synchronizedCollection(vector);
        System.out.println("Synchronized " + synchronizedVector);
        synchronizedVector.add("CoffeeScript");
    }
}

আউটপুট

[JavaFx, Java, WebGL, OpenCV]
Synchronized [JavaFx, Java, WebGL, OpenCV]

দ্রষ্টব্য: সিঙ্ক্রোনাইজড র্যাপার (wrapper) মাল্টি-থ্রেডেড এনভায়রনমেন্টে সেফ्टी দেয়, কিন্তু ইটারেশন (iteration) করার সময় ম্যানুয়ালি সিঙ্ক্রোনাইজেশন প্রয়োজন হয়। আরও ভালো পারফরম্যান্সের জন্য java.util.concurrent প্যাকেজের কনকারেন্ট কালেকশন (যেমন ConcurrentHashMap, CopyOnWriteArrayList) ব্যবহার করা উচিত।

  1. টوییটারে থ্রেড (Thread) তৈরি করার পদ্ধতি

  2. জাভাতে কোন কালেকশন ক্লাসগুলো থ্রেড-সেফ

  3. জাভাতে অবজেক্টকে গার্বেজ কালেকশনের জন্য যোগ্য করার পদ্ধতিগুলো

  4. জাভাতে সিঙ্গলটন Enum তৈরির পদ্ধতি