InheritableThreadLocal হলো জাভার একটি বিশেষ ধরনের ThreadLocal ক্লাস, যা প্যারেন্ট থ্রেড থেকে চাইল্ড থ্রেডে ডেটা শেয়ার করতে দেয়। সাধারণ ThreadLocal শুধুমাত্র একটি নির্দিষ্ট থ্রেডের জন্য ডেটা রাখে, কিন্তু InheritableThreadLocal এর মাধ্যমে ডেটা উত্তরাধিকার সূত্রে চাইল্ড থ্রেডে পাওয়া যায়।
InheritableThreadLocal এর বৈশিষ্ট্য
- ডেটা উত্তরাধিকার সূত্রে প্রাপ্তি: প্যারেন্ট থ্রেডের
ThreadLocalভ্যালু চাইল্ড থ্রেডে অটোমেটিক পাওয়া যায়। - প্রতিটি থ্রেডের জন্য আলাদা কপি: প্রতিটি থ্রেড তার নিজস্ব কপি মেইনটেইন করে।
- চাইল্ড থ্রেডে প্রয়োজন অনুসারে মান পরিবর্তন: ডিফল্ট ভ্যালু পরিবর্তন করা যায়।
InheritableThreadLocal এর সাধারণ ব্যবহার
কোড উদাহরণ ১: প্যারেন্ট থেকে চাইল্ড থ্রেডে ডেটা শেয়ারিং
public class InheritableThreadLocalExample {
// InheritableThreadLocal ডেটা শেয়ার করতে ব্যবহৃত হয়
private static InheritableThreadLocal<String> threadLocal = new InheritableThreadLocal<>();
public static void main(String[] args) {
threadLocal.set("Parent Thread Value");
System.out.println("Parent Thread Value: " + threadLocal.get());
Thread childThread = new Thread(() -> {
System.out.println("Child Thread Value: " + threadLocal.get());
});
childThread.start();
}
}
আউটপুট:
Parent Thread Value: Parent Thread Value
Child Thread Value: Parent Thread Value
কোড উদাহরণ ২: চাইল্ড থ্রেডে ভ্যালু পরিবর্তন
public class InheritableThreadLocalModifiedExample {
// InheritableThreadLocal ডেটা শেয়ার করতে ব্যবহৃত হয়
private static InheritableThreadLocal<String> threadLocal = new InheritableThreadLocal<>();
public static void main(String[] args) {
threadLocal.set("Parent Thread Value");
System.out.println("Parent Thread Value: " + threadLocal.get());
Thread childThread = new Thread(() -> {
// চাইল্ড থ্রেডে মান পরিবর্তন
threadLocal.set("Child Thread Modified Value");
System.out.println("Child Thread Value: " + threadLocal.get());
});
childThread.start();
// প্যারেন্ট থ্রেডে মান অপরিবর্তিত থাকবে
System.out.println("Parent Thread Value after Child Modification: " + threadLocal.get());
}
}
আউটপুট:
Parent Thread Value: Parent Thread Value
Child Thread Value: Child Thread Modified Value
Parent Thread Value after Child Modification: Parent Thread Value
ডিফল্ট মান পরিবর্তন করা
InheritableThreadLocal-এ childValue() মেথড ওভাররাইড করে চাইল্ড থ্রেডের জন্য ডিফল্ট মান পরিবর্তন করা যায়।
public class InheritableThreadLocalWithChildValue {
// InheritableThreadLocal ব্যবহার করে ডিফল্ট মান পরিবর্তন করা
private static InheritableThreadLocal<String> threadLocal = new InheritableThreadLocal<String>() {
@Override
protected String childValue(String parentValue) {
return parentValue + " (Modified for Child)";
}
};
public static void main(String[] args) {
threadLocal.set("Parent Thread Value");
System.out.println("Parent Thread Value: " + threadLocal.get());
Thread childThread = new Thread(() -> {
// চাইল্ড থ্রেড ডিফল্ট মান পাবে
System.out.println("Child Thread Value: " + threadLocal.get());
});
childThread.start();
}
}
আউটপুট:
Parent Thread Value: Parent Thread Value
Child Thread Value: Parent Thread Value (Modified for Child)
কোন পরিস্থিতিতে InheritableThreadLocal ব্যবহার করা উচিত
- লগিং কনটেক্সট: প্যারেন্ট এবং চাইল্ড থ্রেডের জন্য একই কনটেক্সট ডেটা ভাগাভাগি করার জন্য।
- থ্রেড-সেফ ডেটা শেয়ারিং: কনফিগারেশন বা পরিবেশ-সম্পর্কিত তথ্য চাইল্ড থ্রেডে শেয়ার করার জন্য।
- সিকিউরিটি কনটেক্সট: একটি অ্যাপ্লিকেশনে ইউজার অথেন্টিকেশন ডেটা চাইল্ড থ্রেডে শেয়ার করার জন্য।
InheritableThreadLocal এর সীমাবদ্ধতা
- মেমরি ব্যবস্থাপনা: অতিরিক্ত মেমরি ব্যবহারের কারণে এটি সাবধানে ব্যবহার করতে হবে।
- চাইল্ড থ্রেড পরিবর্তন: যদি চাইল্ড থ্রেড মান পরিবর্তন করে, এটি প্যারেন্ট থ্রেডকে প্রভাবিত করে না।
- কমপ্লেক্সিটি: জটিল মাল্টিথ্রেডেড অ্যাপ্লিকেশনে ব্যবহারের ক্ষেত্রে জটিলতা বাড়ায়।
InheritableThreadLocal বনাম ThreadLocal
| প্যারামিটার | ThreadLocal | InheritableThreadLocal |
|---|---|---|
| ডেটা শেয়ারিং | শুধুমাত্র থ্রেডের নিজস্ব কপি রাখে। | প্যারেন্ট থ্রেড থেকে চাইল্ড থ্রেডে ডেটা শেয়ার করতে পারে। |
| ডিফল্ট মান পরিবর্তন | ডিফল্ট মান পরিবর্তন করা যায় না। | childValue() মেথড ওভাররাইড করে ডিফল্ট মান পরিবর্তন করা যায়। |
| ব্যবহার ক্ষেত্র | থ্রেড-সেফ ডেটা সঞ্চয়। | কনটেক্সট ডেটা শেয়ারিং। |
InheritableThreadLocal হলো এমন একটি কার্যকর টুল, যা প্যারেন্ট থ্রেড থেকে চাইল্ড থ্রেডে ডেটা শেয়ার করতে দেয়। এটি মাল্টিথ্রেডেড অ্যাপ্লিকেশনে থ্রেডের মধ্যে ডেটা প্রোপাগেশন সহজ করে। তবে এটি ব্যবহারের সময় মেমরি ব্যবস্থাপনা এবং জটিলতা সম্পর্কে সচেতন থাকা জরুরি।
Read more