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;
    }
}
相关文章
ThreadLocal不好用?那是你没用对!(11)
ThreadLocal不好用?那是你没用对!(11)
119 0
ThreadLocal不好用?那是你没用对!(11)
|
安全 Java
ThreadLocal不好用?那是你没用对!(3)
ThreadLocal不好用?那是你没用对!(3)
114 0
ThreadLocal不好用?那是你没用对!(3)
ThreadLocal不好用?那是你没用对!(8)
ThreadLocal不好用?那是你没用对!(8)
121 0
ThreadLocal不好用?那是你没用对!(8)
ThreadLocal不好用?那是你没用对!(2)
ThreadLocal不好用?那是你没用对!(2)
110 0
ThreadLocal不好用?那是你没用对!(2)
|
安全
ThreadLocal不好用?那是你没用对!(5)
ThreadLocal不好用?那是你没用对!(5)
112 0
ThreadLocal不好用?那是你没用对!(5)
|
Java API
ThreadLocal不好用?那是你没用对!(6)
ThreadLocal不好用?那是你没用对!(6)
165 0
ThreadLocal不好用?那是你没用对!(6)
|
安全
ThreadLocal不好用?那是你没用对!(4)
ThreadLocal不好用?那是你没用对!(4)
123 0
ThreadLocal不好用?那是你没用对!(4)
ThreadLocal不好用?那是你没用对!(14)
ThreadLocal不好用?那是你没用对!(14)
110 0
ThreadLocal不好用?那是你没用对!(14)
ThreadLocal不好用?那是你没用对!(10)
ThreadLocal不好用?那是你没用对!(10)
102 0
ThreadLocal不好用?那是你没用对!(10)
|
Java
ThreadLocal不好用?那是你没用对!(1)
ThreadLocal不好用?那是你没用对!(1)
149 0
ThreadLocal不好用?那是你没用对!(1)

热门文章

最新文章