मुझे पता है कि synchronize
किसी विधि से पहले कीवर्ड का उपयोग करने से उस ऑब्जेक्ट में सिंक्रनाइज़ेशन आता है। यही है, ऑब्जेक्ट के एक ही उदाहरण को चलाने वाले 2 धागे सिंक्रनाइज़ किए जाएंगे।
हालाँकि, चूंकि सिंक्रनाइज़ेशन ऑब्जेक्ट स्तर पर है, इसलिए ऑब्जेक्ट के विभिन्न इंस्टेंसेस को चलाने वाले 2 थ्रेड्स को सिंक्रनाइज़ नहीं किया जाएगा। यदि हमारे पास जावा वर्ग में एक स्थिर चर है जिसे विधि द्वारा बुलाया जाता है, तो हम चाहेंगे कि इसे कक्षा के उदाहरणों के साथ सिंक्रनाइज़ किया जाए। दो उदाहरण 2 अलग-अलग थ्रेड में चल रहे हैं।
क्या हम निम्नलिखित तरीके से सिंक्रोनाइज़ेशन प्राप्त कर सकते हैं?
public class Test
{
private static int count = 0;
private static final Object lock= new Object();
public synchronized void foo()
{
synchronized(lock)
{
count++;
}
}
}
क्या यह सच है कि चूंकि हमने एक ऐसी वस्तु को परिभाषित किया है जो lock
स्थिर है और हम synchronized
उस लॉक के लिए कीवर्ड का उपयोग कर रहे हैं , इसलिए स्थिर चर count
अब कक्षा के उदाहरणों में सिंक्रनाइज़ किया गया है Test
?