volatile কিওয়ার্ড মাল্টিথ্রেডেড এনভায়রনমেন্টে ব্যবহার হয়, যেখানে দুটি থ্রেড একই ভেরিয়েবল পড়ে ও লিখে। এটি পরিবর্তনগুলো সরাসরি মেইন মেমরি ফ্লাশ করে (CPU ক্যাশে না)।
transient কিওয়ার্ড সিরিয়ালাইজেশনের সময় ব্যবহার হয়। এটি চিহ্নিত ফিল্ডগুলো সিরিয়ালাইজেশন ও ডিসিরিয়ালাইজেশনের অংশ হয় না। কোনো ভেরিয়েবলের মান সংরক্ষণ না চাইলে transient ব্যবহার করা হয়।
| ক্রমিক নং | কী | Volatile | Transient |
|---|---|---|---|
| ১ | বেসিক | পরিবর্তন সরাসরি মেইন মেমরিতে ফ্লাশ করে | সিরিয়ালাইজেশনের সময় ভেরিয়েবল বাদ দেয় |
| ২ | ডিফল্ট ভ্যালু | Volatile ডিফল্ট ভ্যালু দিয়ে ইনিশিয়ালাইজ হয় না | ডিসিরিয়ালাইজেশনের সময় ডিফল্ট ভ্যালু দিয়ে ইনিশিয়ালাইজ হয় |
| ৩ | Static | Static ভেরিয়েবলের সাথে ব্যবহার করা যায় | Static কিওয়ার্ডের সাথে ব্যবহার করা যায় না |
| ৪ | Final | Final কিওয়ার্ডের সাথে ব্যবহার করা যায় | Final কিওয়ার্ডের সাথে ব্যবহার করা যায় না |
Transient উদাহরণ
// সিরিয়ালাইজেশন থেকে বাদ দিতে transient ব্যবহার
class TransientExample implements Serializable {
transient int age; // এটি সিরিয়ালাইজ হবে না
private String name;
private String address;
// অন্যান্য কোড
}
Volatile উদাহরণ
class VolatileExample extends Thread {
volatile boolean isRunning = true;
public void run() {
long count = 0;
while (isRunning) {
count++;
}
System.out.println("থ্রেড টার্মিনেটেড। " + count);
}
public static void main(String[] args) throws InterruptedException {
VolatileExample t = new VolatileExample();
t.start();
Thread.sleep(2000);
t.isRunning = false; // অন্য থ্রেড থেকে পরিবর্তন
t.join();
System.out.println("isRunning সেট করা হয়েছে: " + t.isRunning);
}
}
মূল পার্থক্য: volatile থ্রেড সেফটি ও মেমরি ভিজিবিলিটির জন্য, transient সিরিয়ালাইজেশন কন্ট্রোলের জন্য।