2010-11-14 6 views
1

j'ai une variable déclarée comme:architecture fil java et design app

private static List<String> _search_result_list = new ArrayList<String>(15); 

Dans cette application, il y a une série de fils qui se connectent à différents serveurs et obtenir des données à partir des URL fournies aux threads. Les threads obtiennent les résultats des URL, les convertissent en texte et les stockent dans _search_result_list. Mes questions portent sur la synchronisation de l'accès au thread _search_result_list. Quelle est la meilleure manière de s'occuper de ça?

En outre, les threads ne sont pas créés dans la même classe que _search_result_list et n'ont pas accès à la classe englobante _search_result_list. Est-il suffisant de passer un pointeur _search_result_list à la classe qui crée les threads, puis d'attribuer à chaque thread un pointeur sur _search_result_list. Cela nécessitera-t-il une synchronisation, ou est-ce même important si les threads tentent d'écrire simultanément sur ArrayList?

Toute contribution est appréciée.

Mars

Répondre

2

Le plus simple est d'utiliser une liste synchronisée:

  1. Enveloppez votre liste dans Collections.synchronizedList(list)

    private static List<String> _search_result_list = 
         Collections.synchronizedList(new ArrayList<String>(15)); 
    
  2. Si vous avez beaucoup d'autres lectures que l'écriture que utiliser CopyOnWriteArrayList.

0
public void addData(String data) { 
    synchronized(_search_result_list) { 
     _search_result_list.add(data); 
    } 
} 
+0

Je pense que cette méthode fonctionnerait bien aussi. – Mars