हां, सामान्य तौर पर आपको प्रत्येक थ्रेड के लिए एक नया कनेक्शन बनाने की आवश्यकता होती है। आपके पास इस पर नियंत्रण नहीं है कि ऑपरेटिंग सिस्टम थ्रेड्स के निष्पादन को कैसे समयबद्ध करता है (अपने स्वयं के महत्वपूर्ण अनुभागों को परिभाषित करने के बावजूद), इसलिए आप अनजाने में उस एक पाइप के नीचे डेटा भेजने की कोशिश कर रहे कई थ्रेड्स प्राप्त कर सकते हैं।
ध्यान दें कि यह किसी भी नेटवर्क संचार पर लागू होता है। उदाहरण के लिए, यदि आपके पास HTTP कनेक्शन के साथ एक सॉकेट साझा करने का प्रयास करने वाले दो धागे थे।
- थ्रेड 1 एक अनुरोध करता है
- थ्रेड 2 एक अनुरोध करता है
- थ्रेड 1 सॉकेट से बाइट्स पढ़ता है, अनजाने में थ्रेड 2 के अनुरोध से प्रतिक्रिया पढ़ रहा है
यदि आपने अपने सभी लेन-देन को महत्वपूर्ण वर्गों में लपेट लिया है, और इसलिए संपूर्ण प्रारंभ/प्रतिबद्ध चक्र के लिए किसी अन्य थ्रेड को लॉक कर दिया है, तो आप थ्रेड के बीच डेटाबेस कनेक्शन साझा करने में सक्षम हो सकते हैं। लेकिन मैं तब भी ऐसा नहीं करूंगा, जब तक कि आपको वास्तव में JDBC प्रोटोकॉल का सहज ज्ञान न हो।
यदि आपके अधिकांश थ्रेड्स को डेटाबेस कनेक्शन (या बिल्कुल भी आवश्यकता नहीं) की आवश्यकता होती है, तो आप अपने डेटाबेस को काम करने के लिए एक थ्रेड को नामित करने में सक्षम हो सकते हैं, और अन्य थ्रेड्स उस एक थ्रेड के लिए उनके अनुरोधों को कतारबद्ध कर सकते हैं। यह इतने सारे कनेक्शनों के ओवरहेड को कम करेगा। लेकिन आपको यह पता लगाना होगा कि अपने परिवेश में प्रति थ्रेड कनेक्शन कैसे प्रबंधित करें (या StackOverflow पर इसके बारे में एक और विशिष्ट प्रश्न पूछें)।
अपडेट करें: टिप्पणी में आपके प्रश्न का उत्तर देने के लिए, अधिकांश डेटाबेस ब्रांड एक ही कनेक्शन पर एकाधिक समवर्ती लेनदेन का समर्थन नहीं करते हैं (इंटरबेस/फायरबर्ड एकमात्र अपवाद है जिसे मैं जानता हूं)।
एक अलग लेनदेन वस्तु होना अच्छा होगा, और प्रति कनेक्शन एकाधिक लेनदेन शुरू करने और करने में सक्षम होना अच्छा होगा। लेकिन विक्रेता बस इसका समर्थन नहीं करते हैं।
इसी तरह, मानक विक्रेता-स्वतंत्र एपीआई जैसे JDBC और ODBC एक ही धारणा बनाते हैं, कि लेन-देन की स्थिति केवल कनेक्शन ऑब्जेक्ट की एक संपत्ति है।