थ्रेड सेफ़ सिंगलटन क्लास Hi Wab
जावा मल्टीथ्रेडिंग सिंगलटन
एक जावा फ़ाइल में आयात स्टेटमेंट का अर्थ गिवाइस ने इंजेक्शन की सहायता से निर्भरता पदानुक्रम को गहरा दिया एल्गोरिथ्म सभी संभव स्ट्रिंग संयोजनों को सरणी से निश्चित लंबाई तक प्राप्त करने के लिए मैं एनकोडर का इस्तेमाल तेजी से कैसे कर सकता हूं? अपाचे सर्वर (xampp) विंडोज़ 10 (पोर्ट 80) पर नहीं चलता है जेएक्स-आरएस फ्रेमवर्क डेल्फी DLL ShareMem का उपयोग किए बिना वाइडस्ट्रिंग का उपयोग क्यों कर सकता है? एम्स पर सबसे आम सी # बिटवायर ऑपरेशन पीडीओ तैयार वक्तव्य के लिए त्रुटि की जांच ASP.NET MVC 4 के लिए विंडोज प्रमाणीकरण – यह कैसे काम करता है, इसे कैसे परीक्षण किया जाए एंड्रॉइड लॉलीपॉप कार्ड दृश्य पर लहर प्रभाव मैं Chrome DevTools में एक तत्व पर चलाई गई घटनाओं को कैसे देखूं? समानता की समानता के समानांतर संकलन की डिग्री एरे, वेक्टर, स्ट्रैक्ट्स आदि का उपयोग करते हुए, वैराडीक फ़ंक्शन या फ़्रीडीक टेम्पलेट फ़ंक्शन w / out को पारित सभी तर्कों के लिए एक प्रकार निर्दिष्ट करना? सी में पूर्णांक आकार क्या पर निर्भर करता है?
मैंने सिंगलटन क्लास के नीचे लिखा था। मुझे यकीन नहीं है कि यह धागा सुरक्षित एकलटन वर्ग है या नहीं?
public class CassandraAstyanaxConnection { private static CassandraAstyanaxConnection _instance; private AstyanaxContext<Keyspace> context; private Keyspace keyspace; private ColumnFamily<String, String> emp_cf; public static synchronized CassandraAstyanaxConnection getInstance() { if (_instance == null) { _instance = new CassandraAstyanaxConnection(); } return _instance; } /** * Creating Cassandra connection using Astyanax client * */ private CassandraAstyanaxConnection() { context = new AstyanaxContext.Builder() .forCluster(ModelConstants.CLUSTER) .forKeyspace(ModelConstants.KEYSPACE) .withAstyanaxConfiguration(new AstyanaxConfigurationImpl() .setDiscoveryType(NodeDiscoveryType.RING_DESCRIBE) ) .withConnectionPoolConfiguration(new ConnectionPoolConfigurationImpl("MyConnectionPool") .setPort(9160) .setMaxConnsPerHost(1) .setSeeds("127.0.0.1:9160") ) .withAstyanaxConfiguration(new AstyanaxConfigurationImpl() .setCqlVersion("3.0.0") .setTargetCassandraVersion("1.2")) .withConnectionPoolMonitor(new CountingConnectionPoolMonitor()) .buildKeyspace(ThriftFamilyFactory.getInstance()); context.start(); keyspace = context.getEntity(); emp_cf = ColumnFamily.newColumnFamily( ModelConstants.COLUMN_FAMILY, StringSerializer.get(), StringSerializer.get()); } /** * returns the keyspace * * @return */ public Keyspace getKeyspace() { return keyspace; } public ColumnFamily<String, String> getEmp_cf() { return emp_cf; } }
क्या कोई मुझे इस बारे में सहायता कर सकता है? मेरे ऊपर सिंगलटन क्लास पर कोई विचार बहुत मददगार होगा।
सिंगलटन के कार्यान्वयन पर स्थैतिक वर्ग क्यों चुनें?
आईओएस में सिंगलटन 5?
नवीनीकृत कोड: –
मैं अपने कोड में बोहेमियन सुझाव को शामिल करने की कोशिश कर रहा हूं। यहाँ अद्यतन कोड है, मुझे मिला-
public class CassandraAstyanaxConnection { private static class ConnectionHolder { static final CassandraAstyanaxConnection connection = new CassandraAstyanaxConnection(); } public static CassandraAstyanaxConnection getInstance() { return ConnectionHolder.connection; } /** * Creating Cassandra connection using Astyanax client * */ private CassandraAstyanaxConnection() { context = new AstyanaxContext.Builder() .forCluster(ModelConstants.CLUSTER) .forKeyspace(ModelConstants.KEYSPACE) .withAstyanaxConfiguration(new AstyanaxConfigurationImpl() .setDiscoveryType(NodeDiscoveryType.RING_DESCRIBE) ) .withConnectionPoolConfiguration(new ConnectionPoolConfigurationImpl("MyConnectionPool") .setPort(9160) .setMaxConnsPerHost(1) .setSeeds("127.0.0.1:9160") ) .withAstyanaxConfiguration(new AstyanaxConfigurationImpl() .setCqlVersion("3.0.0") .setTargetCassandraVersion("1.2")) .withConnectionPoolMonitor(new CountingConnectionPoolMonitor()) .buildKeyspace(ThriftFamilyFactory.getInstance()); context.start(); keyspace = context.getEntity(); emp_cf = ColumnFamily.newColumnFamily( ModelConstants.COLUMN_FAMILY, StringSerializer.get(), StringSerializer.get()); } /** * returns the keyspace * * @return */ public Keyspace getKeyspace() { return keyspace; } public ColumnFamily<String, String> getEmp_cf() { return emp_cf; } }
क्या कोई एक बार देख सकता है और मुझे बता सकता है कि इस बार मुझे यह सही है या नहीं?
Solutions Collecting From Web of "थ्रेड सेफ़ सिंगलटन क्लास"
एनएटी में डबल चेक किए गए लॉकिंग में वाष्पशील संशोधक की आवश्यकता
स्विफ्ट 3 में गुणों के साथ सिंगलटन
सिंगलटन में डबल चेक लॉकिंग
आप आलसी आरंभीकरण पद्धति को लागू कर रहे हैं – जहां पहली बार उपयोग किए जाने पर उदाहरण बनाया गया है।
लेकिन एक सरल चाल है जो आपको एक थ्रेसेफ कार्यान्वयन कोड को सिंक्रनाइज़ेशन की आवश्यकता नहीं है! इसे प्रारंभिक-मांग-धारक मुहावरों के रूप में जाना जाता है, और यह इस तरह दिखता है:
public class CassandraAstyanaxConnection { private CassandraAstyanaxConnection(){ } private static class Holder { private static final CassandraAstyanaxConnection INSTANCE = new CassandraAstyanaxConnection(); } public static CassandraAstyanaxConnection getInstance() { return Holder.INSTANCE; } // rest of class omitted }
यह कोड getInstance() की पहली कॉलिंग के उदाहरण को प्रारंभ करता है, और महत्वपूर्ण रूप से क्लास लोडर के अनुबंध के कारण सिंक्रनाइज़ेशन की आवश्यकता नहीं है:
क्लास लोडर क्लासेस लोड करता है जब वे पहली बार एक्सेस किए जाते हैं (इस मामले में Holder की पहुंच केवल getInstance() विधि के भीतर getInstance() )
जब कोई वर्ग लोड होता है, और इससे पहले कि कोई भी इसका उपयोग कर सकता है, तो सभी स्थिर प्रारंभिक निष्पादित होने की गारंटी दी जाती है (ऐसा तब होता है जब Holder के स्थैतिक ब्लॉक की आग)
क्लास लोडर की अपनी सिंक्रनाइज़ेशन सही में निर्मित होती है, जो कि ऊपर दिए गए दो बिंदुओं को थ्रेसेफ होने की गारंटी देते हैं
यह एक साफ छोटी चाल है जिसका उपयोग मैं जब भी आलसी आरम्भिकरण की आवश्यकता करता हूं। आप final उदाहरण का बोनस भी प्राप्त कर सकते हैं, भले ही यह आलसी बनाया गया हो यह भी ध्यान रखें कि कोड कितना साफ और सरल है
संपादित करें: आपको सभी कन्स्ट्रक्टर को निजी या संरक्षित के रूप में सेट करना चाहिए। सेटिंग और खाली निजी कन्स्ट्रक्टर काम करेंगे
सभी उपरोक्त विधियां बेसब्री से वस्तु को आरंभ कर रहे हैं इस बारे में कैसा है। यह आपको उदार वर्ग को आलसी शुरू करने में मदद करेगा आपके पास भारी ऑब्जेक्ट हो सकता है और आप स्टार्टअप पर इनिशियलाइज़ नहीं करना चाहते हैं
public class MySinglton { private MySinglton (){} private static volatile MySinglton s; public static MySinglton getInstance(){ if (s != null ) return s; synchronized(MySinglton.class){ if (s == null ) { s = new MySinglton(); } } return s; } }
नहीं, यह धागा-सुरक्षित नहीं है यदि मूल्यों को लुगदी तरीकों पर लौटा दिया गया है, तो परिवर्तनशील वस्तुएं हैं
इस वर्ग के लिए थ्रेड-सुरक्षित एक तरीका यह है कि वह अस्थायी हो।
ऐसा करने के लिए, आप इस तरह से इस पद्धति को बदल सकते हैं:
public Keyspace getKeyspace() { // make a copy to prevent external user to modified or ensure that Keyspace is immutable, in that case, you don&apos;t have to make a copy return new Keyspace( keyspace ); } public ColumnFamily<String, String> getEmp_cf() { // Same principle here. If ColumnFamily is immutable, you don&apos;t have to make a copy. If its not, then make a copy return new ColumnFamily( emp_cf ); }
इस पुस्तक में जावा संगतता अभ्यास में आप उस अपरिवर्तनीयता के सिद्धांत को देख सकते हैं।
नहीं, ये थ्रेड सुरक्षित नहीं दिखता है ऐसा प्रतीत होता है कि आपके पास कॉल करने के बाद कॉल करने के बाद पहुंच योग्य डाटा उपलब्ध है, जहां ताला जारी हो गया होता।
इस महान लेख में यहाँ उल्लेख के रूप में:
एक स्थिर क्षेत्र का उपयोग करने के लिए इस समस्या का सबसे अच्छा समाधान […] है
public class Singelton { private static final Singelton singleObject = new Singelton(); public Singelton getInstance(){ return singleObject; } }
मुझे लगता है कि यह हर बार उदाहरण के लिए बिना जाँच के समान काम करेगा स्थिर पहली बार जांच के समान है
public class Singl { private static Singl _instance; //other vars static{ //synchronized(Singl.class){//do not need _instance = new Singl(); //} } public static Singl getInstance() { return _instance; } private Singl(){ //initizlize } }
क्या बेहतर है ? कई स्थितियों के साथ अगर कई बयानों, या एक
रेल वेबस्केट टूल पर सर्वश्रेष्ठ रूबी
सी # का उपयोग करें System.Type जेनेरिक पैरामीटर के रूप में