दिलचस्प पोस्ट
मेरा आईएपी काम नहीं कर रहा है शुल्क भुगतान शुल्क में कीड़े Android एप्लिकेशन को विकसित करने के लिए सबसे अच्छा आईडीई क्या है? जावास्क्रिप्ट: ऑब्जेक्ट ऑर्लेट को एट्रिब्यूट्स पर आधारित कैसे फ़िल्टर करें? JDBC में कितनी बार कनेक्शन, वक्तव्य और परिणाम बंद होना चाहिए? QtCreator में opencv को कैसे लिंक करें और क्यूटी लाइब्रेरी का उपयोग करें कैसे कोड और परीक्षण से एक रिश्तेदार फाइल को संदर्भित करने के लिए पायथन की स्टडब्लब का उपयोग करके स्थानीय आईपी पते ढूँढना मैं आइसोलिन से 3-डी सतह कैसे उत्पन्न करूं? क्या स्ट्रस्ट को गड़बड़ में बदलना चाहिए? एक जेफ्राम में जेपीएनएल के साथ जेपीएनएल की जगह दो ग्राफ़ किनारे संरेखित करें (ggplot) क्या डी 3 बल लेआउट ग्राफ़ में ज़ूम करने का एक तरीका है? क्या एक डाटासेट को ट्रेनिंग और वैल्यूशन सेट में विभाजित करने के लिए एक नियम है? क्या सभी नोड.जेएस कॉलबैक फ़ंक्शन अतुल्यकालिक हैं? एमवीसी में मॉडल पर सशर्त सत्यापन

जावा में स्थिर तरीके कैसे काम करता है?

अगर मेरे पास एक स्थिर वर्ग है जो बुनियादी डेटा एक्सेस को पूरा करने के लिए हाइबरनेट फ़ंक्शन को बुलाएगा। मैं सोच रहा हूं कि विधि को synchronized करने के लिए धागा-सुरक्षा सुनिश्चित करने के लिए सही दृष्टिकोण है।

मैं चाहता हूं कि यह जानकारी की पहुंच को उसी डीबी उदाहरण से रोकने के लिए करे। हालांकि, अब मुझे यकीन है कि यदि निम्नलिखित कोड getObjectById को सभी वर्गों के लिए बुलाया जा रहा है, जब इसे किसी विशेष वर्ग द्वारा कहा जाता है

 public class Utils { public static synchronized Object getObjectById (Class objclass, Long id) { // call hibernate class Session session = new Configuration().configure().buildSessionFactory().openSession(); Object obj = session.load(objclass, id); session.close(); return obj; } // other static methods } 

Solutions Collecting From Web of "जावा में स्थिर तरीके कैसे काम करता है?"

एक स्थिर विधि लॉक पर सिंक्रनाइज़ का उपयोग करके आप क्लास विधियों और विशेषताओं को सिंक्रनाइज़ करेंगे (उदाहरण विधियों और विशेषताओं के विपरीत)

तो आपकी धारणा सही है।

मैं सोच रहा हूं कि विधि को सिंक्रनाइज़ करने के लिए धागा-सुरक्षा सुनिश्चित करने के लिए सही दृष्टिकोण है।

ज़रुरी नहीं। आपको उस काम को इसके बजाय RDBMS करना चाहिए। वे इस तरह के सामानों में अच्छे हैं

डेटाबेस से ऐक्सेस को सिंक्रनाइज़ करने से आपको एक ही चीज़ मिल जाएगी, जिससे कि आपका एप्लिकेशन बहुत धीमा हो। इसके अलावा, आपके द्वारा पोस्ट किए गए कोड में आप हर बार एक सत्र फैक्ट्री का निर्माण कर रहे हैं, इस तरह, आपका आवेदन वास्तविक काम को निष्पादित करने से डीबी तक पहुंचने में अधिक समय बिताना होगा।

निम्न परिदृश्य की कल्पना करें:

तालिका ए के रिकॉर्ड एक्स में अलग-अलग जानकारी डालने के लिए क्लाइंट ए और बी का प्रयास

आपके दृष्टिकोण के साथ ही आप जो कुछ भी प्राप्त कर रहे हैं, यह सुनिश्चित करना है कि किसी को दूसरे के बाद कहा जाता है, जब यह डीबी में किसी भी तरह होता है, क्योंकि आरडीबीएमएस उन्हें आधे से आधे सूचनाएं आधे से एक ही समय से सम्मिलित करने से रोकेगी । परिणाम समान होगा, लेकिन केवल 5 गुना (या अधिक) धीमा हो जाएगा

शायद हाइबरनेट दस्तावेज़ में "लेनदेन और संगामिति" अध्याय पर एक नज़र रखना बेहतर हो सकता है अधिकांश समय समस्याओं को हल करने की कोशिश कर रहे हैं, पहले से हल किया गया है और एक बेहतर तरीका है।

प्रश्न को अधिक आम तौर पर संबोधित करने के लिए …

ध्यान रखें कि तरीकों पर सिंक्रनाइज़ करने का उपयोग वास्तव में सिर्फ लघुकथ (मान है कि वर्ग कुछ क्लास है):

 synchronized static void foo() { ... } 

के समान है

 static void foo() { synchronized(SomeClass.class) { ... } } 

तथा

 synchronized void foo() { ... } 

के समान है

 void foo() { synchronized(this) { ... } } 

आप लॉक के रूप में किसी भी वस्तु का उपयोग कर सकते हैं। यदि आप स्थैतिक विधियों के सबसेट लॉक करना चाहते हैं, तो आप कर सकते हैं

 class SomeClass { private static final Object LOCK_1 = new Object() {}; private static final Object LOCK_2 = new Object() {}; static void foo() { synchronized(LOCK_1) {...} } static void fee() { synchronized(LOCK_1) {...} } static void fie() { synchronized(LOCK_2) {...} } static void fo() { synchronized(LOCK_2) {...} } } 

(गैर-स्थैतिक तरीकों के लिए, आप लॉक को गैर-स्थिर फ़ील्ड बनाना चाहते हैं)

स्थैतिक तरीके लॉकिंग के लिए ऑब्जेक्ट के रूप में क्लास का उपयोग करते हैं, जो आपके उदाहरण के लिए Utils.class है। तो हां, यह ठीक है।

static synchronized मतलब क्लास के Class ऑब्जेक्ट पर लॉक रखने के लिए जहां synchronized अर्थ उस क्लास के ऑब्जेक्ट पर लॉक रखने वाला है। इसका अर्थ है, यदि आप किसी थ्रेड (निष्पादन के) में एक गैर-स्थिर सिंक्रनाइज़ किए गए विधि तक पहुंच रहे हैं, तो आप अब भी एक अन्य धागे का उपयोग कर एक स्थिर सिंक्रनाइज़ विधि का उपयोग कर सकते हैं।

इसलिए, धागा से अधिक किसी भी समय दो तरह के तरीकों (या तो दो स्थिर या दो गैर-स्थिर तरीकों) तक पहुँचने संभव नहीं है।

आप यह क्यों लागू करना चाहते हैं कि केवल एक धागा किसी एक समय में डीबी तक पहुंच सकता है?

यह किसी भी आवश्यक लॉक को लागू करने के लिए डेटाबेस ड्राइवर का काम है , यह मानते हुए कि Connection केवल एक धागे द्वारा एक समय में उपयोग किया जाता है!

सबसे अधिक संभावना है, आपके डेटाबेस में एकाधिक, समानांतर पहुंच को संभालने में पूरी तरह से सक्षम है

यदि यह आपके डेटाबेस में डेटा के साथ कुछ है, तो क्यों नहीं प्राप्त करने के लिए डेटाबेस अलगाव लॉकिंग का उपयोग करें?

आपके प्रश्न का उत्तर देने के लिए, यह ऐसा करता है: आपकी synchronized विधि एक समय में एक से अधिक धागे द्वारा निष्पादित नहीं की जा सकती।