享元模式 应用

享元模式:

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


@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<>>();

猜你喜欢

转载自blog.csdn.net/itlijinping_zhang/article/details/118699456