2009-11-24 26 views
36

necesito un mapa segura hilo, tengo algo como esto: (i soy muy nuevo en java)hilo mapa seguro para 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

Nota, la estática mutables son un muy, muy, muy mala idea. –

Respuesta

1

Su mapa "list" debe ser estático si desea acceder a él en un bloque estático.

2

Su código debe verse así, ignorando las importaciones, et al.

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 
    } 
} 

Dicho esto, tenga en cuenta que esto no es tan seguro como lo que cabría esperar. Como otros han mencionado, es probable que desee utilizar el Java Concurrent Collections.

1

No se puede inicializar una variable miembro de objeto en un bloque estático. Los bloques estáticos se ejecutan una vez cuando la clase se carga por primera vez, no una vez por cada objeto de esa clase, mientras que la variable "lista" se crea una vez para cada objeto de la clase.

Además, no puede instanciar un "nuevo mapa" porque Map es una interfaz. Debe envolver el mapa sincronizado alrededor de un mapa real como un HashMap o un TreeMap.

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

lo siento, esta es una clase estática, actualizaré la pregunta – 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)