архитектура потока Java и дизайн приложения - PullRequest
1 голос
/ 14 ноября 2010

У меня есть переменная, объявленная как:

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

В этом приложении есть ряд потоков, которые подключаются к различным серверам и получают данные с URL-адресов, предоставленных потокам.Потоки получают результаты URL-адресов, преобразуют их в текстовые и сохраняют их в _search_result_list.Мои вопросы о синхронизации доступа к потокам _search_result_list.Как лучше всего это сделать?

Кроме того, потоки не создаются в том же классе, что и _search_result_list, и фактически не имеют доступа к классу включения _search_result_list.Достаточно ли передать указатель _search_result_list в класс, который создает потоки, и затем этот класс должен предоставить каждому потоку указатель на _search_result_list.Требуется ли синхронизация или даже имеет значение, если потоки пытаются одновременно выполнить запись в ArrayList?

Любые входные данные приветствуются.

Mars

Ответы [ 2 ]

2 голосов
/ 14 ноября 2010

Самый простой - использовать синхронизированный список:

  1. Оберните свой список в Collections.synchronizedList (список)

    private static List<String> _search_result_list = 
             Collections.synchronizedList(new ArrayList<String>(15));
    
  2. Если у вас гораздо больше операций чтения, чем записи, используйте CopyOnWriteArrayList .

0 голосов
/ 14 ноября 2010
public void addData(String data) {
   synchronized(_search_result_list) {
      _search_result_list.add(data);
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...