封装的方法 如果很多地方调用,且需要增加参数 可以考虑使用threadlocal

开发使用到了threadlocal 所以就写个demo 记录 一下:

例如:封装的方法getResult .   main 方法中的多次调用 模拟多个类中调用这个方法

封装的方法 如果很多地方调用,且需要增加参数 可以考虑使用threadlocal_第1张图片

2  之前习惯的逻辑就是给公共方法增加参数。然后 根据是否传参增加需求的逻辑

封装的方法 如果很多地方调用,且需要增加参数 可以考虑使用threadlocal_第2张图片

3 上面这样修改  会增加工作量,调用方法的位置都需要修改所以可以考虑使用threadLocal

封装的方法 如果很多地方调用,且需要增加参数 可以考虑使用threadlocal_第3张图片

4 在需要增加参数的位置增加参数 即可。其他方法就不需要 都修改了( 如果有更好的办法 ,欢迎评论交流,一起学习,一起进步)

封装的方法 如果很多地方调用,且需要增加参数 可以考虑使用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;
        }

    }
}

封装的方法 如果很多地方调用,且需要增加参数 可以考虑使用threadlocal_第5张图片

 

最好在使用完之后 手动调用remove方法:

相关链接 : https://blog.csdn.net/noodleprince/article/details/79716425

封装的方法 如果很多地方调用,且需要增加参数 可以考虑使用threadlocal_第6张图片

封装的方法 如果很多地方调用,且需要增加参数 可以考虑使用threadlocal_第7张图片

你可能感兴趣的:(多读书,多动手,一起学习java,一起复习java基础)