Нужна ли синхронизация в шаблоне проектирования в полулегком весе? - PullRequest
0 голосов
/ 15 апреля 2019

Поскольку объекты, которые мы разделяем в шаблоне проектирования в полутяжелом весе, являются неизменяемыми, мне интересно, нужно ли нам учитывать синхронизацию?Даже если несколько потоков пытаются получить доступ к одним и тем же объектам и вставить их в общий пул, так как объекты всегда одинаковы, я думаю, что нам не нужно синхронизировать, пожалуйста, расскажите об этом немного подробнее.Спасибо

public class WeakPool<T> {
    private final WeakHashMap<T, WeakReference<T>> pool = new WeakHashMap<T, WeakReference<T>>();
    public T get(T object) {
        final T res;
        WeakReference<T> ref = pool.get(object);
        if (ref != null) {
            res = ref.get();
        } else {
            res = null;
        }
        return res;
    }
    public void put(T object) {
        pool.put(object, new WeakReference<T>(object));
    }
}
public class InternPool<T> {

    private final WeakPool<T> pool = new WeakPool<T>();

    public synchronized T intern(T object) {
        T res = pool.get(object);
        if (res == null) {
            pool.put(object);
            res = object;
        }
        return res;
    }
}

Вот код из этого поста: Общий InternPool в Java?

Вопрос в том, нужна ли нам синхронизация в этомметод интерна?

1 Ответ

0 голосов
/ 15 апреля 2019

Большинство многопоточных экземпляров шаблона flyweight требуют синхронизации при создании, получении или освобождении общих компонентов, даже если сами объекты flyweight являются неизменяемыми.Это зависит от конкретных задействованных структур данных.

Требования к синхронизации обычно определяются деталями реализации, а не шаблонами проектирования.Они должны быть скрыты за соответствующими интерфейсами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...