Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Нужно ли синхронизировать доступ на чтение?


Автор: UnicornMirage 23.5.2006, 15:52
Здравствуйте..

Скажите пожалуйста, нужно ли синхронизировать доступ на чтение статического ресурса? Поясню примером:
Код


class SomeClass {
    
    /** Разделяемый статический ресурс */
    private static HashMap map;

    public static synchrinized void add(String key, Object obj) {
            map.put(key, obj);
    }


    /**
     * Вопрос связан с этим методом - нужно ли его синхронизировать?
     */
    public static synchronized Object get(String key) {
           return map.get(key);
    }  

}


Понятно что нужно синхронизировать метод, изменяющий ресурс. Но вот вопрос - нужно ли синхронизировать чтение?

ps: есть некая статическая информация - которая должна читаться всеми instances данного класса (хотелось бы чтобы это было без синхронизации)..

 

Автор: powerOn 23.5.2006, 17:08
Если ресурс изменяется в неколько шагов, и за это время может принять промежуточное состояние, то нужно синхронизировать. Поскольку может случиться так, что чтатель получит промежуточное состояние ресурса, а не конечное.
Если ресурс изменяется атомарной (одной, неделимой)  операцией, то нет смысла вообще синхронизировать. Даже запись. 
  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)