2009-11-24 5 views
36

i besoin d'un fil carte sûr, j'ai quelque chose comme ceci: (je suis très nouveau pour Java)fil carte sécurité pour Java

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

Notez mutables sont statics vraiment, vraiment, vraiment mauvaise idée. –

Répondre

1

Votre carte "list" doit être statique si vous voulez y accéder dans un bloc statique.

2

Votre code devrait ressembler à ceci, en ignorant les importations, et al. Cela dit, gardez à l'esprit que ceci n'est pas aussi sûr que vous pourriez l'espérer. Comme d'autres l'ont mentionné, vous voulez probablement utiliser le Java Concurrent Collections.

1

Vous ne pouvez pas initialiser une variable de membre d'objet dans un bloc statique. Les blocs statiques sont exécutés une fois lors du premier chargement de la classe, pas une fois pour chaque objet de cette classe, alors que la variable "list" est créée une fois pour chaque objet de la classe. En outre, vous ne pouvez pas instancier une "nouvelle carte" car Map est une interface. Vous devez envelopper le synchronizedMap autour d'une vraie carte comme une HashMap ou une TreeMap.

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

je suis désolé, c'est une classe statique, je vais mettre à jour la question – Omu

0

de java.util.concurrent

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

de java.util.Collections

Collections.synchronizedMap(Map<K,V> m) 
Collections.synchronizedNavigableMap(NavigableMap<K,V> m) 
Collections.synchronizedSortedMap(SortedMap<K,V> m)