【ThreadLocal实践二】带你用实际的业务去理解ThreadLocal的使用以及缓存的思想

前言

本文是对 前文的更深入的说明 建议就查看本篇文章 让你彻底弄懂ThreadLocal可以使用在哪些场景下使用:
【ThreadLocal实践一】带你用实际的业务去理解ThreadLocal的使用以及缓存的思想 - 优快云 App

ThreadLocal 实现了「线程隔离」 每个线程拥有自己独立的「存储空间」来记录与某个 ThreadLocal 相关联的值。

该怎样去利用这个特性在多线程编程下?

场景一:存储业务上下文需要频繁查库的数据

业务背景: 在一个会话中批量下1000个订单 每一个订单信息都需要校验相同的信息:例如
1、1000个订单的【银行账户】是否一致
2、1000个订单的【收款人】是否一致
3、1000个订单的【订单地址】是否一致
如何做到缓存重复的校验信息?

//part1: 定义缓存的对象 账户 收款人 地址
// 每一个map中key为BankAccount、Receiver、Address的id
// 每一个map中的value为id对应的值
public class Cache {
   

// 重要:设置为final 和 @Getter代表是只读的属性
    @Getter
    private final Map<String, BankAccount> bankAccountCache = new HashMap<>();

    @Getter
    private final Map<String, Receiver> receiverCache = new HashMap<>();
    
    @Getter
    private final Map<String, Address> addressCache = new HashMap<>();

}

//part2: 定义存放缓存的ThreadLocal的工具类context(可以理解存放缓存的地方)
  // 缓存上下文
public class CacheContext {
   

   //重要:static final 使得只有一个ThreadLocal
    private static final ThreadLocal<Cache> CACHE = new ThreadLocal<>();

    /**
     * 初始化缓存,使得仅第一次调用返回cache,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值