मल्टीथ्रेडिंग वातावरण में, दो या दो से अधिक थ्रेड साझा संसाधनों को एक साथ एक्सेस कर सकते हैं जिससे सिस्टम का असंगत व्यवहार हो सकता है। जावा साझा संसाधनों या ऑब्जेक्ट्स के समवर्ती एक्सेस को प्रतिबंधित करने के लिए लॉक की अवधारणा का उपयोग करता है। लॉक दो स्तरों पर लागू किए जा सकते हैं -
- ऑब्जेक्ट लेवल लॉक्स - इसका उपयोग तब किया जा सकता है जब आप चाहते हैं कि नॉन-स्टेटिक मेथड या नॉन-स्टेटिक कोड ब्लॉक केवल एक थ्रेड द्वारा एक्सेस किया जाए।
- क्लास लेवल लॉक्स - इसका उपयोग तब किया जाता है जब हम रनटाइम पर उपलब्ध सभी इंस्टेंस में से किसी में भी सिंक्रोनाइज़्ड ब्लॉक में कई थ्रेड्स को प्रवेश करने से रोकना चाहते हैं। इसका उपयोग हमेशा स्टेटिक डेटा को थ्रेड-सेफ बनाने के लिए किया जाना चाहिए।
| क्र. सं. | मुख्य बिंदु | ऑब्जेक्ट लेवल लॉक | क्लास लेवल लॉक |
|---|---|---|---|
| 1 | बेसिक | इसका उपयोग तब किया जा सकता है जब आप चाहते हैं कि नॉन-स्टेटिक मेथड या नॉन-स्टेटिक कोड ब्लॉक केवल एक थ्रेड द्वारा एक्सेस किया जाए | इसका उपयोग तब किया जाता है जब हम रनटाइम पर उपलब्ध सभी इंस्टेंस में से किसी में भी सिंक्रोनाइज़्ड ब्लॉक में कई थ्रेड्स को प्रवेश करने से रोकना चाहते हैं |
| 2 | स्टेटिक/नॉन-स्टेटिक | इसका उपयोग हमेशा नॉन-स्टेटिक डेटा को थ्रेड-सेफ बनाने के लिए किया जाना चाहिए। | इसका उपयोग हमेशा स्टेटिक डेटा को थ्रेड-सेफ बनाने के लिए किया जाना चाहिए। |
| 3 | लॉक्स की संख्या | क्लास का प्रत्येक ऑब्जेक्ट का अपना लॉक हो सकता है | क्लास के कई ऑब्जेक्ट मौजूद हो सकते हैं लेकिन हमेशा एक क्लास का क्लास ऑब्जेक्ट लॉक उपलब्ध होता है |
क्लास लेवल लॉक का उदाहरण
public class ClassLevelLockExample {
public void classLevelLockMethod() {
synchronized (ClassLevelLockExample.class) {
// अपना काम यहां करें
}
}
}
ऑब्जेक्ट लेवल लॉक का उदाहरण
public class ObjectLevelLockExample {
public void objectLevelLockMethod() {
synchronized (this) {
// अपना काम यहां करें
}
}
}