差異處
這裏顯示兩個版本的差異處。
java:effective_java:concurrency:avoid_excessive_synchronization [2020/02/19 01:02] tony [Introduction] |
java:effective_java:concurrency:avoid_excessive_synchronization [2023/06/25 09:48] |
||
---|---|---|---|
行 1: | 行 1: | ||
- | {{tag>java effective_java java_concurrency}} | + | |
- | ====== Effective Java - Avoid excessive synchronization ====== | + | |
- | ===== Introduction ===== | + | |
- | 這個Item的宗旨如字面上的意思:「避免過度的使用synchronized」。Effective Java在這個Item中有以下幾個重點: | + | |
- | * 有使用synchronized控制的method,不要讓client有機會override以避免liveness與safety failures。 | + | |
- | * synchronized block中,為了效能著想,工作越少越好。 | + | |
- | * 善用同步的方法,沒有需要就不要用。 | + | |
- | 首先針對第一點,可以用以下範例做說明: | + | |
- | <code bash> | + | |
- | 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); | + | |
- | } | + | |
- | } | + | |
- | } | + | |
- | </code> | + | |
- | 由於addObserver與removeObserver都可以override, | + | |
- | ===== Note ===== | + | |
- | Effective Java第三版Item 79。 | + | |
- | ===== Reference ===== | + | |
- | * Effective Java, 3/e | + | |
- | ===== ===== | + | |
- | ---- | + | |
- | \\ | + | |
- | ~~DISQUS~~ | + |