java多線程與並發之java並發編程實踐(九)__編程

來源:互聯網
上載者:User
並發集合(三)
----------
使用ConcurrentMap實作類別

java.util.concurrent.ConcurrentMap介面和ConcurrentHashMap實作類別 只能在鍵不存在時將元素加入到map中,只有在鍵存在並映射到特定值時才能從map中刪除一個元素。主要定義了下面幾個方法(K表示鍵的類型,V表示值的類型):
1. V putIfAbsent(K key,V value) : 如果指定鍵已經不再與某個值相關聯,則將它與給定值關聯。
2. boolean remove(Object key,Object value) : 只有目前將鍵的條目映射到給定值時,才移除該鍵的條目。
3. boolean replace(K key,V oldValue,V newValue) : 只有目前將鍵的條目映射到給定值時,才替換該鍵的條目。
4. V replace(K key,V value) : 只有目前將鍵的條目映射到某一值時,才替換該鍵的條目。

putIfAbsent()方法用於在map中進行添加。這個方法以要添加到ConcurrentMap中的鍵的值為參數,就像普通的put()方法,但是只有在map不包含這個鍵時,才能將鍵加入到map中。如果map已經包含這個鍵,那麼這個鍵的現有值就會保留。putIfAbsent()方法是原子的。等價於下面的代碼(除了原子地執行此操作之外):

if(!map.containsKey(key))return map.put(key,value);elsereturn map.get(key)
像putIfAbsent()方法一樣,重載後的remove()方法有兩個參數:鍵和值。在調用時,只有當鍵映射到指定的值時才從map中刪除這個鍵。如果不匹配,那麼就不刪除這個鍵,並返回false。如果值匹配鍵的當前映射內容,那麼就刪除這個鍵,這個方法是原子性的。這種操作的等價原始碼(除了原子地執行此操作之外):
if(map.containsKey(key) && map.get(key).equals(value)){map.remove(key);return true;}else return false;
總之,ConcurrentMap中定義的方法是原子性的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.