Конкурентное чтение из списка

262
21 августа 2018, 01:40

Является ли кеш со следующей реализацией потокобезопасным для чтения? Кешируемые данные хранятся в статическом списке list. Реализация заполнения кеша гарантирует, что обновление кеша c использованием updateCache будет проходить неконкурентно. При обновлении кеша в качестве буфера используется локальная переменная temp. Доступ к элементам кеша осуществляется извне осуществляется через итератор - getIterator. Псевдокод кеша

class Cache {
  /** Список, хранящий кешированные данные */
  private static volatile List list;
  /* Обновить кеш */
  public static void updateCache() {
    // Буфер
    List temp = new ArrayList();
    // Заполнить буфер из БД ...
    list = temp;
  }
  /** Получить итератор по кешу */
  public static Iterator getIterator() {
    return list.getIterator();
  }
}

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

READ ALSO
Поиск по слову java

Поиск по слову java

Скажите пожалуйста, в чем ошибкаДелаю поиск по слову

349
Запуск отдельного теста в тест-классе используя JUnit Parameterized

Запуск отдельного теста в тест-классе используя JUnit Parameterized

Не могу запустить отдельный тест в параметризированном тестовом классеЕсли запускать весь класс - всё работает, а вот отдельно - нет

295
Что такое legacy code?

Что такое legacy code?

Не могу найти переводМожете объяснить в двух словах что это такое? Что за понятие?

289
Math округление в java

Math округление в java

Функция в java Mathceil() должна округлять число при делении в большую сторону, т

226