凯文也过不了字节跳动试用期?线程变量模式(Thread Local Pattern)来讲述

目的

减少方法入参, 一次请求处于相同的上下文中

例子代码

最近 Kevin 刚从迪士尼跳槽到字节跳动, 还没有过试用期就离职了, 安倍晋三也由于身体原因辞去日本首相的工作

我们先创建一个 ThreadLocal 的实例:

public static final 
ThreadLocal<User> INTEGER_THREAD_LOCAL 
= new ThreadLocal<>();

我们在多个线程中描述这个事情:

IntStream.range(1, 10)
    .parallel().forEach(i -> {
    try {
        final User user = new User();
        user.setName("凯文·梅耶尔" + i);
        user.setPlace("字节跳动");
        INTEGER_THREAD_LOCAL.set(user);
        print();
    } finally {
        INTEGER_THREAD_LOCAL.remove();
    }
});

其中 print 方法的实现是:

public static void print() {
    System.out.println(
        INTEGER_THREAD_LOCAL.get()
            .getName() + "从" +
            INTEGER_THREAD_LOCAL.get()
                .getPlace() + "离开");
}

最终输出:

凯文·梅耶尔3从字节跳动离开
凯文·梅耶尔9从字节跳动离开
凯文·梅耶尔2从字节跳动离开
凯文·梅耶尔7从字节跳动离开
凯文·梅耶尔5从字节跳动离开
凯文·梅耶尔4从字节跳动离开
凯文·梅耶尔6从字节跳动离开
凯文·梅耶尔1从字节跳动离开
凯文·梅耶尔8从字节跳动离开

一次请求可能会调用非常多的方法, 这些上下文比如 traceId, userId 之类的都是好多接口都需要使用的信息, 如果每个接口都提供这些的字段, 将会非常难以维护和调用这些代码

课后作业

  1. 了解 ThreadLocal 底层的数据结构
  2. 在从网关或者前端发送过来的请求, 将用户信息存储在 ThreadLocal 中消费
  3. 思考如何微服务 rpc 如何达到类似于 ThreadLocal 这样的系统上下文

微信:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值