併發包compareAndSet的疑惑?爲什麼沒有對應的compare,If Not Equals,Then Set的方法呢?...

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章