在處理線程安全時,首先需要引進 annotations 包
我們在說線程安全其實本質就是變量的原子性產生的狀態變化,在任何系統,變量無處不在,因此,面對高并發多線程的業務代碼處理就特別注意線程安全,也是我們很多http://www.jyygyx.com容易疏忽的地方
1》 常規非安全寫法
public class UnSynchronizedInteger {
private int value;
public synchronized int get() {
return value;
}
public synchronized void set(int value) {
this.value = value;
}
}
點評:這樣的寫法,針對單線程還可以說的過去,但現實場景特別是核心業務代碼時,不可能不觸及到高并發下的多線程處理,在這類情況下,value值是可能被丟失的和失效的(這類故障不會在常規的測試中出現,等出現了也很難找到故障所在)。
2》 線程安全正確的寫法:
@ThreadSafe
public class SynchronizedInteger {
@GuardedBy("this") private int value;
public synchronized int get() {
return value;
}
public synchronized void set(int value) {
this.value = value;
}
}