方法加载时间长---1单例模式 2消息队列

背景:写了一个方法,遍历循环数据,耗时两三分钟,影响体验
一、想到了 static 静态变量或静态块,在项目启动时就加载变量,访问时可直接使用,避免了访问时加载时长的问题
二、由静态变量或静态块,想到了单例模式,在网上搜索有基于枚举的单例模式,参考:单例模式中为什么用枚举更好如何创建一个完美的单例模式java单例之enum实现方式

自己写了一个单例,访问时长由两三分钟缩短为二三十秒,代码如下:

public class CitySingleton extends BaseController{
    private String json;

    private static volatile CitySingleton INSTANCE;

    private CitySingleton()throws Exception{
        json = packageCity();
    }

    public static CitySingleton getInstance() throws Exception{
        if(INSTANCE == null){
            synchronized(CitySingleton.class){
                //双重检查锁定
                if(INSTANCE == null){
                    INSTANCE = new CitySingleton();
                }
            }
        }
        return INSTANCE;
    }

    public String packageCity() throws Exception{
        List<Map<String,Object>> provinces = new ArrayList<Map<String, Object>>();
        List<City> provinceList = cityService.getsByType(1);

        if(provinceList != null && !provinceList.isEmpty()){
            for (City province : provinceList) {
                List<Map<String,Object>> cities = new ArrayList<Map<String, Object>>();
                List<City> cityList = cityService.getsByParent(province.getId());
                if(cityList != null && !cityList.isEmpty()) {
                    for (City city : cityList) {
                        List<Map<String,Object>> areas = new ArrayList<Map<String, Object>>();
                        List<City> areaList = cityService.getsByParent(city.getId());
                        if(areaList != null && !areaList.isEmpty()) {
                            for (City area : areaList) {
                                Map<String,Object> areaMap = new HashMap<String, Object>();
                                areaMap.put("name",area.getCnname());
                                areaMap.put("code",area.getId());
                                areas.add(areaMap);
                            }
                        }
                        Map<String,Object> cityMap = new HashMap<String, Object>();
                        cityMap.put("name",city.getCnname());
                        cityMap.put("code",city.getId());
                        cityMap.put("sub",areas);
                        cities.add(cityMap);
                    }
                }
                Map<String,Object> provinceMap = new HashMap<String, Object>();
                provinceMap.put("name",province.getCnname());
                provinceMap.put("code",province.getId());
                provinceMap.put("sub",cities);
                provinces.add(provinceMap);
            }
        }
        return JSON.toJSONString(provinces);
    }

    public String getJson(){
        return json;
    }

    public void setJson(String json) {
        this.json = json;
    }
}

出于用户体验,二三十秒还是有些长,
三、现在考虑用消息队列异步执行的方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值