Как определить статический Arraylist в поточно-безопасной среде - PullRequest
0 голосов
/ 23 мая 2011

Как определить статический Arraylist в поточно-безопасной среде.Я пробовал синхронизированное ключевое слово, но я слышал, что использование Automic классов из java concurrent package - лучшее решение для статического массива.Кто-нибудь может сказать, как объявить и использовать статический массив данных безопасным способом?

Обновление:

в моем коде у меня есть статический список, чтобы сохранить детали ваших техвход в приложение

private static List<UserSessionForm> userSessionList = new ArrayList<UserSessionForm>();

во время входа в систему и доступа к домашней странице (все время доступ к домашней странице), проверка на наличие деталей пользователя в userSessionList, если это невозможно, добавление подробностей в userSessionList и во время выхода из системы удаление деталей пользователя из списка.при входе в систему

if (getUserSessionIndex(uform)!=-1) {
            this.getUserSession().add(usform);
            this.getSession().setAttribute("customerId", getCustomer_id());
        }

при выходе из системы

  public void logout(){
     int index = getUserSessionIndex(usform);
        //if user is  already loginned, remove that user from the usersession list
        if (index != -1) {
            UserAction.getUserSession().remove(index);
        }
   }

  private int getUserSessionIndex(UserSessionForm usform) {
    int index = -1;
    int tmp_index = 0;
    for (UserSessionForm tmp : UserAction.getUserSession()) {
        if (usform.equals(tmp)) {
            if (usform.getUserlogin_id() == tmp.getUserlogin_id()) {
                index = tmp_index;
                break;
            }
        }
        tmp_index += 1;
    }
    return index;
}

, поэтому есть возможность прочитать и записать запрос в одно и то же время

Ответы [ 2 ]

4 голосов
/ 23 мая 2011

Это зависит от того, как вы собираетесь его использовать.Есть несколько вариантов:

  • use CopyOnWriteArrayList - это современная параллельная реализация, лучше всего подходящая, когда относительно мало записей и много чтений
  • используйте синхронизированную оболочку, полученную через Collections.synchronizedList - она ​​позволяет вам получить доступ к «оригинальному» несинхронизированному списку, например, изнутри содержащего объекта, но обеспечивает потокобезопасный доступ к «внешнему миру».

Vector - старая устаревшая реализация коллекции, которую не следует использовать в новом коде.

3 голосов
/ 23 мая 2011

java.util.concurrent.CopyOnWriteArrayList - это «потокобезопасный вариант ArrayList, в котором все мутативные операции add, set и т. Д. Реализуются путем создания новой копии базового массива».

...