亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

java putifabsent案例有哪些

小樊
81
2024-11-18 15:39:19
欄目: 編程語言

在Java中,putIfAbsent方法是ConcurrentHashMap類的一個方法,它用于在映射中插入一個鍵值對,但只有當該鍵不存在時。如果鍵已經存在,則不會進行任何操作,并返回與給定鍵關聯的現有值。這個方法在多線程環境下非常有用,因為它可以確保線程安全地添加或更新映射中的元素。

以下是一些使用putIfAbsent方法的案例:

  1. 緩存實現: 使用ConcurrentHashMapputIfAbsent可以實現一個簡單的緩存。當需要獲取某個數據時,首先檢查緩存中是否存在該數據。如果存在,則直接返回;如果不存在,則從數據源(如數據庫)獲取數據,并將其添加到緩存中。

    public class Cache<K, V> {
        private final ConcurrentHashMap<K, V> cache = new ConcurrentHashMap<>();
    
        public V get(K key) {
            return cache.computeIfAbsent(key, k -> fetchFromDataSource(k));
        }
    
        private V fetchFromDataSource(K key) {
            // 從數據源獲取數據的邏輯
            return null;
        }
    }
    
  2. 計數器: 可以使用putIfAbsent方法實現一個線程安全的計數器。當需要增加計數器的值時,使用putIfAbsent方法確保同一時間只有一個線程能夠更新計數器的值。

    public class Counter {
        private final ConcurrentHashMap<String, Integer> counterMap = new ConcurrentHashMap<>();
    
        public void increment(String key) {
            counterMap.compute(key, (k, v) -> v == null ? 1 : v + 1);
        }
    
        public int getCount(String key) {
            return counterMap.getOrDefault(key, 0);
        }
    }
    
  3. 分布式鎖: 在分布式系統中,可以使用putIfAbsent方法實現一個簡單的分布式鎖。當一個節點需要獲取鎖時,它會嘗試使用putIfAbsent方法在共享映射中插入一個鎖標記。如果插入成功,則該節點獲得了鎖;否則,說明其他節點已經持有鎖,當前節點需要等待。

    public class DistributedLock {
        private final ConcurrentHashMap<String, String> lockMap = new ConcurrentHashMap<>();
    
        public boolean tryLock(String lockKey) {
            String existingLock = lockMap.putIfAbsent(lockKey, lockKey);
            return existingLock == null;
        }
    
        public void unlock(String lockKey) {
            lockMap.remove(lockKey);
        }
    }
    
  4. 單例模式: 使用putIfAbsent方法可以實現線程安全的懶漢式單例模式。當需要獲取單例對象時,首先檢查映射中是否已經存在該對象。如果不存在,則創建一個新對象并將其添加到映射中;如果存在,則直接返回已有的對象。

    public class Singleton {
        private static final ConcurrentHashMap<String, Singleton> instances = new ConcurrentHashMap<>();
    
        private Singleton() {}
    
        public static Singleton getInstance(String key) {
            return instances.computeIfAbsent(key, k -> new Singleton());
        }
    }
    

這些案例展示了putIfAbsent方法在不同場景下的應用,可以幫助你更好地理解和使用這個方法。

0
凌云县| 义马市| 苏尼特左旗| 班戈县| 唐河县| 喀喇沁旗| 万州区| 高密市| 本溪| 霞浦县| 台中市| 方城县| 长子县| 东明县| 新和县| 建昌县| 青岛市| 南乐县| 博罗县| 内江市| 姚安县| 米林县| 深州市| 新乐市| 乐亭县| 那曲县| 镇安县| 余庆县| 长垣县| 建平县| 灵台县| 天门市| 迁安市| 万宁市| 四子王旗| 旬阳县| 博兴县| 河东区| 五指山市| 南城县| 天峻县|