threadlocal用法示例,threadlocal使用场景

首页 > 技术 > 作者:YD1662023-04-15 23:54:10

可以将user作为参数在每个方法中进行传递,

缺点:但是这样做会产生代码冗余问题,并且可维护性差

对此进行改进的方案是使用一个Map,在第一个方法中存储信息,后续需要使用直接get()即可,

threadlocal用法示例,threadlocal使用场景(9)

缺点:如果在单线程环境下可以保证安全,但是在多线程环境下是不可以的。如果使用加锁和ConcurrentHashMap都会产生性能问题。

使用 ThreadLocal 可以避免加锁产生的性能问题,也可以避免层层传递参数来实现业务需求,就可以实现不同线程中存储不同信息的要求。

threadlocal用法示例,threadlocal使用场景(10)

/** * 演示 ThreadLocal 的用法2:避免参数传递的麻烦 */ public class ThreadLocalNormalUsage06 { public static void main(String[] args) { new Service1().process(); } } class Service1 { public void process() { User user = new User("鲁毅"); //将User对象存储到 holder 中 UserContextHolder.holder.set(user); new Service2().process(); } } class Service2 { public void process() { User user = UserContextHolder.holder.get(); System.out.println("Service2拿到用户名: " user.name); new Service3().process(); } } class Service3 { public void process() { User user = UserContextHolder.holder.get(); System.out.println("Service3拿到用户名: " user.name); } } class UserContextHolder { public static ThreadLocal<User> holder = new ThreadLocal<>(); } class User { String name; public User(String name) { this.name = name; } }

运行结果

threadlocal用法示例,threadlocal使用场景(11)

3.对ThreadLocal的总结4.使用ThreadLocal的好处5.ThreadLocal原理

threadlocal用法示例,threadlocal使用场景(12)

上一页1234下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.