volatile कीवर्ड का उपयोग मल्टीथ्रेडिंग वातावरण में किया जाता है जहां दो थ्रेड एक ही वैरिएबल को एक साथ पढ़ और लिख रहे होते हैं। volatile कीवर्ड परिवर्तनों को सीधे मेन मेमोरी में फ्लश करता है बजाय CPU कैश के।
दूसरी ओर, transient कीवर्ड का उपयोग सीरियलाइज़ेशन के दौरान किया जाता है। जो फील्ड transient के रूप में मार्क किए जाते हैं वे सीरियलाइज़ेशन और डिसीरियलाइज़ेशन का हिस्सा नहीं हो सकते। यदि हम किसी वैरिएबल की वैल्यू को सेव नहीं करना चाहते हैं तो हम उस वैरिएबल के साथ transient कीवर्ड का उपयोग करते हैं।
| क्र. सं. | मुख्य बिंदु | Volatile | Transient |
|---|---|---|---|
| 1 | बुनियादी | Volatile कीवर्ड का उपयोग परिवर्तनों को सीधे मेन मेमोरी में फ्लश करने के लिए किया जाता है | Transient कीवर्ड का उपयोग सीरियलाइज़ेशन के दौरान वैरिएबल को बाहर करने के लिए किया जाता है |
| 2. | डिफ़ॉल्ट मान | Volatile को डिफ़ॉल्ट मान से इनिशियलाइज़ नहीं किया जाता। | डिसीरियलाइज़ेशन के दौरान, transient वैरिएबल डिफ़ॉल्ट मान से इनिशियलाइज़ होते हैं |
| 3 | Static | Volatile को static वैरिएबल के साथ उपयोग किया जा सकता है। | Transient को static कीवर्ड के साथ उपयोग नहीं किया जा सकता |
| 4 | Final | Volatile को final कीवर्ड के साथ उपयोग किया जा सकता है | Transient को final कीवर्ड के साथ उपयोग नहीं किया जा सकता |
Transient का उदाहरण
// एक नमूना क्लास जो transient कीवर्ड का उपयोग करके
// उनके सीरियलाइज़ेशन को छोड़ देती है।
class TransientExample implements Serializable {
transient int age;
// अन्य फील्ड सीरियलाइज़ करें
private String name;
private String address;
// अन्य कोड
}
Volatile का उदाहरण
class VolatileExmaple extends Thread{
boolean volatile isRunning = true;
public void run() {
long count=0;
while (isRunning) {
count++;
}
System.out.println("थ्रेड समाप्त हुआ।" + count);
}
public static void main(String[] args) throws InterruptedException {
VolatileExmaple t = new VolatileExmaple();
t.start();
Thread.sleep(2000);
t.isRunning = false;
t.join();
System.out.println("isRunning सेट किया गया " + t.isRunning);
}
}