public final boolean compareAndSet(boolean expect,boolean update)
如果當前值 == 預期值,則以原子方式將該值設置爲給定的更新值。
併發包的這個方法,看起來意思是compare,If Equals,Then Set
我有個疑惑,爲什麼沒有對應的compare,If Not Equals,Then Set的方法呢 ?
比如,以下場景,就無法使用compareAndSet:
if(a != b){
a = b;
}
if(a != c){
a = b;
}
因爲我覺得,compare,If Equals,Then Set 和 compare,If Not Equals,Then Set 是不能互相實現對方的,所以應該要有另外的方法才完整。
查到了:原來是因爲compareAndSet是cpu支持的,沒有 compare,If Not Equals,Then Set是因爲cpu不支持。
http://tomyz0223.iteye.com/blog/770677