ThreadLocal不好用?那是你没用对!(14)

简介: ThreadLocal不好用?那是你没用对!(14)

ThreadLocal 操作类:


/**
 * 用户信息存储类
 */
class UserStorage {
    // 用户信息
    publicstatic ThreadLocal<User> USER = new ThreadLocal();
    /**
     * 存储用户信息
     * @param user 用户数据
     */
    public static void setUser(User user) {
        USER.set(user);
    }
}


订单类:


/**
 * 订单类
 */
class OrderSystem {
    /**
     * 订单添加方法
     */
    public void add() {
        // 得到用户信息
        User user = UserStorage.USER.get();
        // 业务处理代码(忽略)...
        System.out.println(String.format("订单系统收到用户:%s 的请求。",
                user.getName()));
    }
}


仓储类:


/**
 * 仓储类
 */
class RepertorySystem {
    /**
     * 减库存方法
     */
    public void decrement() {
        // 得到用户信息
        User user = UserStorage.USER.get();
        // 业务处理代码(忽略)...
        System.out.println(String.format("仓储系统收到用户:%s 的请求。",
                user.getName()));
    }
}


以上程序的最终执行结果:


微信图片_20220120190030.jpg


从上述结果可以看出,当我们在主线程中先初始化了 User 对象之后,订单类和仓储类无需进行任何的参数传递也可以正常获得 User 对象了,从而实现了一个线程中,跨类和跨方法的数据传递


相关文章
|
存储 机器学习/深度学习 缓存
我惊了!!!ThreadLocal 源码存在内存泄露的 Bug!!!
我惊了!!!ThreadLocal 源码存在内存泄露的 Bug!!!
117 0
|
存储 消息中间件 JavaScript
ThreadLocal 你真的用不上吗?
ThreadLocal 你真的用不上吗?
|
存储 缓存 Java
终于弄明白了ThreadLocal
ThreadLocal是Thread的局部变量,用于编多线程程序,对解决多线程程序的并发问题有一定的启示作用。
147 0
终于弄明白了ThreadLocal
|
Java
如何避免忘记清理 ThreadLocal ?
hreadLocal 可以解决“线程安全问题”。 也可以作为上下文暂存数据以备后续步骤获取。 但是 ThreadLocal 用不好的确容易产生故障,因而有些团队不允许使用 ThreadLocal。 最核心的一个原因是很容易忘记清理,在线程池环境下复用导致串环境。 那么,有什么优雅的解法没?本文给出自己的一个解法。
731 0
如何避免忘记清理 ThreadLocal ?
|
安全
ThreadLocal不好用?那是你没用对!(4)
ThreadLocal不好用?那是你没用对!(4)
107 0
ThreadLocal不好用?那是你没用对!(4)
ThreadLocal不好用?那是你没用对!(8)
ThreadLocal不好用?那是你没用对!(8)
111 0
ThreadLocal不好用?那是你没用对!(8)
ThreadLocal不好用?那是你没用对!(2)
ThreadLocal不好用?那是你没用对!(2)
94 0
ThreadLocal不好用?那是你没用对!(2)
ThreadLocal不好用?那是你没用对!(11)
ThreadLocal不好用?那是你没用对!(11)
104 0
ThreadLocal不好用?那是你没用对!(11)
ThreadLocal不好用?那是你没用对!(9)
ThreadLocal不好用?那是你没用对!(9)
104 0
ThreadLocal不好用?那是你没用对!(9)
ThreadLocal不好用?那是你没用对!(10)
ThreadLocal不好用?那是你没用对!(10)
87 0
ThreadLocal不好用?那是你没用对!(10)