Threadlocal 传递参数(百度二面)

去百度面试,二面的时候 面试官问 如果我想跟踪一个请求,从接收请求,处理到返回的整个流程,有没有好的办法,后来面试官说了 Threadlocal 可以做到传递参数。

这是ThreadLocal的一个功能。很多人可能不知道,因为threadlocal 是局部变量,只要线程不销毁,就会一直存在,因此可以使用threadlocal来跟踪传递参数;

如果对ThreadLocal一点都不了解的话,可以先参考这篇文章:ThreadLocal 定义,以及是否可能引起的内存泄露(threadlocalMap的Key是弱引用,用线程池有可能泄露)

方法如下:

最近在项目中使用到了JDK提供的线程池,遇到了在多线程环境下在线程内部共享数据的问题

使用ThreadLocal 来解决线程内部共享数据的问题 

 定义BO 

package com.unicom.ucloud.aar.kettle.bo;

import com.unicom.ucloud.aar.kettle.vo.KettleRunMessageVo;

/**
 * @author jiaoyiping@gmail.com
 * @remark 
 */
public class ThreadLocalMessage {
    private  ThreadLocal<KettleRunMessageVo> messages;
    
    private ThreadLocalMessage(){
        messages = new ThreadLocal<KettleRunMessageVo>();
    }
    
    public  KettleRunMessageVo getMessage() {
        return messages.get();
    }

    public  void setMessage(KettleRunMessageVo message) {
        messages.set(message);
    }
    
    private static ThreadLocalMessage threadLocalMessage = new ThreadLocalMessage();
    
    public static ThreadLocalMessage getInstance(){
        return threadLocalMessage;
    }
}
//在线程中使用
KettleRunMessageVo message = ThreadLocalMessage.getInstance().getMessage();
        if(message==null)
        {
            message = new KettleRunMessageVo();
            
            ThreadLocalMessage.getInstance().setMessage(message);
        }

 

使用message的set方法设置相应的值

在同一个线程中的其他地方get这个message 得到相应的值
参考:

转载于:https://www.cnblogs.com/aspirant/p/9183920.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值