在本教程中,我們將學(xué)習(xí)Java ConcurrentMap接口及其方法。
Java集合框架的ConcurrentMap接口提供了線程安全的映射。 也就是說,多個(gè)線程可以一次訪問該映射,而不會(huì)影響映射中條目的一致性。
ConcurrentMap 被稱為同步map。
它繼承了Map接口。
由于ConcurrentMap是接口,因此無法從中創(chuàng)建對(duì)象。
為了使用ConcurrentMap接口的功能,我們需要使用實(shí)現(xiàn)該接口的類ConcurrentHashMap。
要使用ConcurrentMap,我們必須先導(dǎo)入java.util.concurrent.ConcurrentMap軟件包。導(dǎo)入包后,將按照以下方法創(chuàng)建并發(fā)映射。
// ConcurrentHashMap類的使用 CocurrentMap<Key, Value> numbers = new ConcurrentHashMap<>();
在上面的代碼中,我們創(chuàng)建了一個(gè)名為numbers的ConcurrentMap。
這里,
Key - 用于關(guān)聯(lián)map中每個(gè)元素(值)的唯一標(biāo)識(shí)符
Value - map中與鍵相關(guān)聯(lián)的元素
ConcurrentMap接口包含Map接口的所有方法。 這是因?yàn)镸ap是ConcurrentMap接口的超級(jí)接口。
除了所有這些方法,以下是特定于ConcurrentMap接口的方法。
putIfAbsent() - 如果指定的鍵尚未與任何值關(guān)聯(lián),則將指定的鍵/值插入到映射中。
compute() - 計(jì)算指定鍵及其先前映射值的條目(鍵/值映射)。
computeIfAbsent() - 如果鍵尚未與任何值映射,則使用指定函數(shù)為指定鍵計(jì)算一個(gè)值。
computeIfPresent() - 如果已使用指定值映射鍵,則為指定鍵計(jì)算新條目(鍵/值映射)。
forEach() - 訪問map的所有條目并執(zhí)行指定的操作。
merge() -如果指定鍵已經(jīng)映射到某個(gè)值,則將指定的新值與指定鍵的舊值合并。如果鍵還沒有映射,該方法將指定的值與鍵關(guān)聯(lián)。
import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ConcurrentHashMap; class Main { public static void main(String[] args) { //使用ConcurrentHashMap創(chuàng)建ConcurrentMap ConcurrentMap<String, Integer> numbers = new ConcurrentHashMap<>(); // 插入元素到map numbers.put("Two", 2); numbers.put("One", 1); numbers.put("Three", 3); System.out.println("ConcurrentMap: " + numbers); //訪問指定的鍵 int value = numbers.get("One"); System.out.println("被訪問的值: " + value); //刪除指定鍵的值 int removedValue = numbers.remove("Two"); System.out.println("被刪除的值: " + removedValue); } }
輸出結(jié)果
ConcurrentMap: {One=1, Two=2, Three=3} 被訪問的值: 1 被刪除的值: 2
要了解更多信息ConcurrentHashMap,請(qǐng)?jiān)L問Java ConcurrentHashMap。