结构型模式-享元模式

享元模式

将复杂对象拆分静态不变部分和动态变化部分,静态部分放在内存或redis中,使用的时候从内存或redis取出来复用,也就是说所有对象的静态部分在内存或redis中只保留了一份,动态变化部分一般放在redis中,使用的时候也从redis取出来和静态部分拼接起来。
Activity类定义了静态属性和动态属性stock的引用,Stock类定义了动态属性,享元工厂ActivityFactory类从内存activityMap中获取静态部分,RedisUtils类从redis中获取动态部分,ActivityController类把静态部分和动态部分拼接起来
享元模式类图

补充

为了不引入其他组件只关注与享元模式本身,使用java.util.concurrent.atomic.AtomicInteger来模拟redis,创建定时任务线程池指定线程数量1来模拟库存的变化。
原子操作:一个任务在执行完毕之前不会被中断。java.util.concurrent.atomic包提供了AtomicInterger、AtomicLong、AtomicBoolean等原子变量类,这些类中的方法都提供了原子操作,例如AtomicInterger.addAndGet(2)、AtomicInterger.incrementAndGet()会原子的将变量值增加2或1并返回增加后的值,在多线程情况下多个线程对一个共享变量操作时,不需要额外的同步操作就可保持数据的一致性,确保数据安全。
原子性保证:这两个方法都利用了底层硬件Java 内存模型的支持来提供原子性保证。在单处理器系统中,这通常是通过禁用中断来实现的;在多处理器系统中,则可能需要使用更复杂的机制,如比较并交换(Compare-and-Swap, CAS)操作。
scheduleAtFixedRate()方法用于在初始延迟后首次执行任务,然后按照固定的周期频率重复执行任务。如果任务执行花费的时间比period长,那么下一次任务会立即在上一个任务完成后开始,而不会等待完整的period时间。这可能导致任务执行的时间间隔小于period。
scheduleWithFixedDelay()方法也是用于定期执行任务,但它考虑的是任务执行完成后的延迟时间。这意味着每次任务执行完成后,都会等待指定的延迟时间后再执行下一次任务。

效果

在这里插入图片描述

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值