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

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

以上程序的执行结果为:


微信图片_20220120185721.jpg


从上述结果可以看出,使用 ThreadLocal 也可以解决线程并发问题,并且避免了代码加锁排队执行的问题。


使用场景2:跨类传递数据


除了上面的使用场景之外,我们还可以使用 ThreadLocal 来实现线程中跨类、跨方法的数据传递。比如登录用户的 User 对象信息,我们需要在不同的子系统中多次使用,如果使用传统的方式,我们需要使用方法传参和返回值的方式来传递 User 对象,然而这样就无形中造成了类和类之间,甚至是系统和系统之间的相互耦合了,所以此时我们可以使用 ThreadLocal 来实现 User 对象的传递。


确定了方案之后,接下来我们来实现具体的业务代码。我们可以先在主线程中构造并初始化一个 User 对象,并将此 User 对象存储在 ThreadLocal 中,存储完成之后,我们就可以在同一个线程的其他类中,如仓储类或订单类中直接获取并使用 User 对象了,具体实现代码如下。


主线程中的业务代码:


publicclass ThreadLocalByUser {
    public static void main(String[] args) {
        // 初始化用户信息
        User user = new User("Java");
        // 将 User 对象存储在 ThreadLocal 中
        UserStorage.setUser(user);
        // 调用订单系统
        OrderSystem orderSystem = new OrderSystem();
        // 添加订单(方法内获取用户信息)
        orderSystem.add();
        // 调用仓储系统
        RepertorySystem repertory = new RepertorySystem();
        // 减库存(方法内获取用户信息)
        repertory.decrement();
    }
}


User 实体类:


/**
 * 用户实体类
 */
class User {
    public User(String name) {
        this.name = name;
    }
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
相关文章
|
8月前
|
存储 机器学习/深度学习 缓存
我惊了!!!ThreadLocal 源码存在内存泄露的 Bug!!!
我惊了!!!ThreadLocal 源码存在内存泄露的 Bug!!!
|
存储 消息中间件 JavaScript
ThreadLocal 你真的用不上吗?
ThreadLocal 你真的用不上吗?
|
存储 缓存 Java
终于弄明白了ThreadLocal
ThreadLocal是Thread的局部变量,用于编多线程程序,对解决多线程程序的并发问题有一定的启示作用。
114 0
终于弄明白了ThreadLocal
J3
|
存储 安全 Java
synchronized解析及锁膨胀过程,面试再也不怕了
synchronized解析及锁膨胀过程,面试再也不怕了
J3
497 0
synchronized解析及锁膨胀过程,面试再也不怕了
ThreadLocal不好用?那是你没用对!(14)
ThreadLocal不好用?那是你没用对!(14)
83 0
ThreadLocal不好用?那是你没用对!(14)
ThreadLocal不好用?那是你没用对!(8)
ThreadLocal不好用?那是你没用对!(8)
97 0
ThreadLocal不好用?那是你没用对!(8)
|
Java
ThreadLocal不好用?那是你没用对!(15)
ThreadLocal不好用?那是你没用对!(15)
96 0
ThreadLocal不好用?那是你没用对!(2)
ThreadLocal不好用?那是你没用对!(2)
79 0
ThreadLocal不好用?那是你没用对!(2)
ThreadLocal不好用?那是你没用对!(11)
ThreadLocal不好用?那是你没用对!(11)
91 0
ThreadLocal不好用?那是你没用对!(11)
|
Java API
ThreadLocal不好用?那是你没用对!(6)
ThreadLocal不好用?那是你没用对!(6)
138 0
ThreadLocal不好用?那是你没用对!(6)