享元模式 应用

享元模式:

主要用于减少创建对象的数量,以减少内存占用和提高性能 有时候不要特别死


@Component
@Slf4j
public class Cache implements CommandLineRunner {

    @Autowired
    private MaterialService materialService;

    @Autowired
    TabBzglXtpmflhxService tabBzglXtpmflhxService;


    @Autowired
    RedisTemplate redisTemplate;

    public final static ConcurrentHashMap<Integer,List<MaterialVo>> yearMaterialMap = new ConcurrentHashMap<>();


    final static BlockingQueue blockingQueue=new ArrayBlockingQueue<>(10);

    final static ThreadPoolExecutor threadPoolExecutor=new ThreadPoolExecutor(4,100, 1, TimeUnit.MINUTES, blockingQueue);



    @Override
    public void run(String... args) throws Exception {
        startThread();
        log.info("物资及物资分类缓冲完毕");
    }

    public static List<MaterialVo> getMaterialSls(Integer year) {
        return yearMaterialMap.get(year);
    }
    public void startThread(){
        List<Integer> yearList = materialService.selectYear();
        for (Integer year:yearList) {
            Runnable runnable = () -> {
               yearMaterialMap.put(year,materialService.selectMaterial(year));
            };
            threadPoolExecutor.execute(runnable);
        }
    }
}

将每年的物质信息放入到Map中,通过年份去取每年的物质

还有我们平时做的一些权限系统,将用户的账户Id和权限绑定,查询用户权限时可以直接去通过账户id去取权限,如果map中没有,去数据库查查,完之后将用户对应的权限放入map中,如果权限发生改变时,通过权限id查出对应的账户删除map中的相应账户id

Map<Long, List<>> map = new ConcurrentHashMap<Long, List<>>();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值