這是本文件的舊版!
Effective Java - Avoid excessive synchronization
Introduction
這個Item的宗旨如字面上的意思:「避免過度的使用synchronized」。Effective Java在這個Item中有以下幾個重點:
- 有使用synchronized控制的method,不要讓client有機會override以避免liveness與safety failures。
- synchronized block中,為了效能著想,工作越少越好。
- 善用同步的方法,沒有需要就不要用。
首先針對第一點,可以用以下範例做說明:
public class ObservableSet<E> extends ForwardingSet<E> { public ObservableSet(Set<E> set) { super(set); } private final List<SetObserver<E>> observers= new ArrayList<>(); public void addObserver(SetObserver<E> observer) { synchronized(observers) { observers.add(observer); } } public Boolean removeObserver(SetObserver<E> observer) { synchronized(observers) { return observers.remove(observer); } } }由於addObserver與removeObserver都可以override,
Note
Effective Java第三版Item 79。
Reference
- Effective Java, 3/e