开发使用到了threadlocal 所以就写个demo 记录 一下:
例如:封装的方法getResult . main 方法中的多次调用 模拟多个类中调用这个方法
2 之前习惯的逻辑就是给公共方法增加参数。然后 根据是否传参增加需求的逻辑
3 上面这样修改 会增加工作量,调用方法的位置都需要修改所以可以考虑使用threadLocal
4 在需要增加参数的位置增加参数 即可。其他方法就不需要 都修改了( 如果有更好的办法 ,欢迎评论交流,一起学习,一起进步)
需要注意的是:这个只能 同一个线程才可以用。dubbo 调用的话 是不行的。新起的多线程也是不行的
(如果有更好的办法 ,欢迎评论交流,一起学习,一起进步)
有的文章也 说 存在弱引用 可能会存在内存泄漏。所以使用完之后 最好 设置个null
文章链接:https://blog.csdn.net/puppylpg/article/details/80433271
public class testThreadlocal {
public static void main(String[] args){
// 类a中调用
System.out.println(getResult("AAA","aaa"));
// 类b中调用
System.out.println(getResult("BBB","bbb"));
// 类c中调用
System.out.println(getResult("CCC","ccc"));
// 外部类调用
ThreadLocalUtil.setThreadlocal("外部");
System.out.println( getResult("waibu","waibu"));
}
public static String getResult(String canshu1,String canshu2){
String flag = ThreadLocalUtil.getThradlocal();
ThreadLocalUtil.setThreadlocal(null);
if(null != flag && flag.equals("外部")){
return "这是外部逻辑";
}else {
return canshu1+"--"+canshu2;
}
}
}
最好在使用完之后 手动调用remove方法:
相关链接 : https://blog.csdn.net/noodleprince/article/details/79716425