并发编程之简单map缓存

本文讨论了在并发编程中如何实现简单的map缓存,以避免重复请求和资源浪费。通过使用线程安全的ConcurrentHashMap以及Future类,确保了在请求处理过程中线程安全,并减少了不必要的三方接口调用。最后,通过使用putIfAbsent原子方法进一步优化了并发性能。
摘要由CSDN通过智能技术生成

并发编程之简单map缓存

有些时候,我们请求后台想要获取到的数据需要通过某些复杂计算,或者通过后台请求其他的程序来获取。比如根据手机号查询手机归属地,传入手机号,我们调用别的三方接口来获取手机归属地。
假如有相同的手机号,我们肯定不想每次都要重新去请求三方来获取归属地信息,所以我们一般会做一个缓存,将已经请求过的归属地信息保存在本地。(事实是,其实这种情况我们不会在程序内部通过map缓存,而是通过mongo或者redis等三方插件来进行,这里只做演示)
代码如下:

package com.ziyuzile.study;

import java.util.HashMap;
import java.util.Map;

public class CacheMap {
   

    public final Map<String,String> map = new HashMap<>();


    public String getAreaInfo(String mobile){
   
        //首先从map中获取手机归属地信息
        String result = map.get(mobile);
        if(result==null){
   
            //请求其他运营商获得手机归属地
            result = requestOtherOperator(mobile);
            map.put(mobile,result);
        }
        return result;
    }

    public String requestOtherOperator(String mobile){
   
        //请求三方
        return "返回结果";
    }

}

当请求到达时,我们先根据手机号去map里面取,如果没取到,我们再去请求三方获得归属地信息,同时把返回的数据存到map里面。
然而,hashmap并非是线程安全的,所以我们需要确保不会有两个线程同时访问。将getAreaInfo方法变成同步方法。

    public synchronized String getAreaInfo(String mobile){
   
        //首先从map中获取手机归属地信息
        String result = map.get(mobile);
        if(result==null)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值