आपको session.setAttribute()
थ्रेड से सुरक्षित होने की आवश्यकता नहीं है (ऊपर @McDowell से सर्वलेट spec टिप्पणी देखें)।
हालांकि, के लिए एक अलग उदाहरण का उपयोग करते हैं। मान लीजिए कि आप विशेषता के मान chek करना चाहता था चलो, अगर < = 100 इस मामले में आप getAttribute()
तुलना < = 100 और setAttribute()
के लिए कोड के ब्लॉक syncronize करने के लिए की आवश्यकता होगी तो इसे अद्यतन करें।
अब, क्या आप लॉक के लिए इस्तेमाल करना चाहिए? याद रखें कि लॉक के लिए अलग-अलग ऑब्जेक्ट्स का उपयोग होने पर कोई सिंक्रनाइज़ेशन नहीं होता है। तो अलग-अलग कोड ब्लॉक को एक ही ऑब्जेक्ट का उपयोग करना चाहिए। session
ऑब्जेक्ट की आपकी पसंद ठीक हो सकती है। यह भी याद रखें कि अलग-अलग कोड ब्लॉक सत्र (दोनों पढ़ने/लिखने) तक पहुंच सकते हैं भले ही आपने लॉक लिया हो, जब तक कि अन्य कोड सत्र ऑब्जेक्ट पर भी लॉक न हो। यहां एक गड़बड़ी यह है कि आपके कोड में बहुत से स्थान सत्र ऑब्जेक्ट पर लॉक लेते हैं और इस प्रकार प्रतीक्षा करनी होती है। उदाहरण के लिए, यदि आपका कोड ब्लॉक सत्र विशेषता एक का उपयोग करता है और कोड का एक और हंक सत्र का श्रेय बी का उपयोग करता है, यह अच्छा नहीं अगर वे दोनों सत्र वस्तु पर एक ताला लेने के द्वारा एक दूसरे पर इंतजार की जरूरत नहीं थी होगा। लॉकफोरा नामक स्थैतिक वस्तुओं का उपयोग, और लॉकफ़ोरबी आपके कोड का उपयोग करने के लिए बेहतर विकल्प हो सकता है - उदा। synchronized (LockForA) { }.
स्रोत
2011-11-10 22:27:11
यह दोबारा जांच ताला नहीं है, यह सिर्फ एक नक्शे में एक मूल्य डाल रहा है कि वह पहले से मौजूद नहीं है। – Yishai
सहमत, इसकी शुरुआत। हटाए गए। – Kevin
लॉक को मेरी कक्षा में स्थैतिक बना देगा (जो एक सर्वलेट नहीं है, लेकिन एक वर्ग जो जेएसपी पेज के भीतर से बनाया गया है) सुनिश्चित करें कि सभी अनुरोध एक ही लॉक पर सिंक्रनाइज़ कर रहे हैं? वर्ग एक JSP पृष्ठ के अंदर बनाई गई है – MCS