मल्टीथ्रेडिंग वातावरण में, दो या दो से अधिक थ्रेड एक साथ साझा संसाधनों तक पहुँच सकते हैं जो सिस्टम के असंगत व्यवहार का नेतृत्व कर सकते हैं। जावा साझा संसाधनों या वस्तुओं की समवर्ती पहुंच को प्रतिबंधित करने के लिए ताले की अवधारणा का उपयोग करता है। ताले दो स्तरों पर लागू किए जा सकते हैं -
- ऑब्जेक्ट लेवल लॉक्स - इसका उपयोग तब किया जा सकता है जब आप चाहते हैं कि नॉन-स्टेटिक मेथड या कोड के नॉन-स्टेटिक ब्लॉक को केवल एक थ्रेड द्वारा एक्सेस किया जाए।
- क्लास लेवल लॉक - इसका उपयोग तब किया जा सकता है जब हम रनटाइम पर सभी उपलब्ध इंस्टेंस में से किसी में भी कई थ्रेड्स को सिंक्रोनाइज़्ड ब्लॉक में प्रवेश करने से रोकना चाहते हैं। इसका उपयोग हमेशा स्थिर डेटा थ्रेड को सुरक्षित बनाने के लिए किया जाना चाहिए।
वें> <वें शैली ="पाठ-संरेखण:केंद्र;">कुंजी
वें> <वें स्टाइल ="टेक्स्ट-एलाइन:सेंटर;">ऑब्जेक्ट लेवल लॉक
वें> <वें शैली ="पाठ-संरेखण:केंद्र;">कक्षा स्तर लॉक
वें>
1पी>
बुनियादी
इसका उपयोग तब किया जा सकता है जब आप चाहते हैं कि गैर-स्थैतिक विधि या कोड के गैर-स्थिर ब्लॉक को केवल एक थ्रेड द्वारा एक्सेस किया जाना चाहिए
इसका उपयोग तब किया जा सकता है जब हम रनटाइम पर किसी भी उपलब्ध इंस्टेंस में कई थ्रेड्स को सिंक्रोनाइज़्ड ब्लॉक में प्रवेश करने से रोकना चाहते हैं
2पी>
स्थिर/गैर स्थैतिक
इसका उपयोग हमेशा गैर-स्थिर डेटा थ्रेड को सुरक्षित बनाने के लिए किया जाना चाहिए।
इसका उपयोग हमेशा स्थिर डेटा थ्रेड को सुरक्षित बनाने के लिए किया जाना चाहिए।
3पी>
तालों की संख्या
कक्षा की प्रत्येक वस्तु का अपना ताला हो सकता है
क्लास के कई ऑब्जेक्ट मौजूद हो सकते हैं लेकिन हमेशा एक क्लास का क्लास ऑब्जेक्ट लॉक उपलब्ध होता है
क्लास लेवल लॉक का उदाहरण
public class ClassLevelLockExample { public void classLevelLockMethod() { synchronized (ClassLevelLockExample.class) { //DO your stuff here } } }
ऑब्जेक्ट लेवल लॉक का उदाहरण
public class ObjectLevelLockExample { public void objectLevelLockMethod() { synchronized (this) { //DO your stuff here } } }