2009-11-24 15 views
36

के लिए मैं एक धागा सुरक्षित नक्शे की जरूरत है, मैं कुछ इस तरह है: (i जावा करने के लिए बहुत नया हूँ)धागा सुरक्षित नक्शा जावा

public static class Manager 
     { 
     static 
     { 
//something wrong here, doesn't compile 
      list = new java.util.Collections 
      .synchronizedMap(new Map<String, Client>()); 
     } 

     static Map<String,Client> list; 

     public static void AddClient(Client client) 
     { 
     // thread safe add client to the list 
     } 

     public static void RemoveClient(Client client) 
     { 
     // thread safe remove client to the list 
     } 

     } 
+0

ध्यान दें, परिवर्तनशील स्टैटिक्स एक सच में, सच में, सच बुरा विचार कर रहे हैं। –

उत्तर

1

आपका मानचित्र यदि आप स्थिर ब्लॉक में इसे एक्सेस करना चाहते हैं तो "सूची" स्थिर होनी चाहिए।

2

आपका कोड इस तरह दिखना चाहिए, आयात को अनदेखा करना, आदि।

public class Manager 
{ 
    Map<String,Client> list = java.util.Collections.synchronizedMap(new HashMap<String, Client>()); 

    public void AddClient(Client client) 
    { 
     // thread safe add client to the list 
    } 

    public void RemoveClient(Client client) 
    { 
     // thread safe remove client to the list 
    } 
} 

यह कहा गया कि सावधान रहें कि यह थ्रेड सुरक्षित नहीं है जैसा आप उम्मीद कर सकते हैं। जैसा कि अन्य ने उल्लेख किया है, आप शायद Java Concurrent Collections का उपयोग करना चाहते हैं।

1

आप एक स्थिर ब्लॉक में ऑब्जेक्ट सदस्य चर प्रारंभ नहीं कर सकते हैं। स्टेटिक ब्लॉक एक बार तब निष्पादित किए जाते हैं जब कक्षा पहली बार लोड होती है, न कि उस वर्ग के प्रत्येक ऑब्जेक्ट के लिए, जबकि चर के "ऑब्जेक्ट" को कक्षा के प्रत्येक ऑब्जेक्ट के लिए बनाया जाता है।

इसके अलावा, आप "नया मानचित्र" तुरंत चालू नहीं कर सकते क्योंकि नक्शा एक इंटरफ़ेस है। आपको एक वास्तविक मानचित्र के आस-पास सिंक्रनाइज़मैप को एक हैश मैप या ट्रीमैप जैसे लपेटने की आवश्यकता है।

 { 
      list = new java.util.Collections 
      .synchronizedMap(new HashMap<String, Client>()); 
     } 
+0

से बहुत तेज़ है, मुझे खेद है, यह एक स्थिर वर्ग है, मैं – Omu

24

java.util.concurrent पैकेज से ConcurrentHashMap वर्ग मानचित्र का एक धागा सुरक्षित कार्यान्वयन कि synchronizedMap (Hashtable पर और कहीं बेहतर scalability) की तुलना में कहीं बेहतर संगामिति प्रदान करता है। http://www.ibm.com/developerworks/java/library/j-jtp07233.html देखें।

+0

प्रश्न अपडेट करूँगा यह दिलचस्प आईबीएम की उपस्थिति के लिए स्वीकृत व्यक्ति की बेहतर प्रतिक्रिया है संपर्क – Pino

0
java.util.Collections से java.util.concurrent

ConcurrentHashMap<K,V> 
ConcurrentMap<K,V> 
ConcurrentNavigableMap<K,V> 
ConcurrentHashMap<K,V> 
ConcurrentSkipListMap<K,V> 

से

Collections.synchronizedMap(Map<K,V> m) 
Collections.synchronizedNavigableMap(NavigableMap<K,V> m) 
Collections.synchronizedSortedMap(SortedMap<K,V> m) 
संबंधित मुद्दे