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())); } }
以上程序的最终执行结果:
从上述结果可以看出,当我们在主线程中先初始化了 User
对象之后,订单类和仓储类无需进行任何的参数传递也可以正常获得 User
对象了,从而实现了一个线程中,跨类和跨方法的数据传递。