简单使用ThreadLocal

在多线程中,对同一个公共资源同时覆写输出,会产生相同的值,这时使用ThreadLocal类方法使每次覆写只能被保存一次并且有对应线程的标记,可实现隔离操作

//被操作类
class Message {
    private String note;
    public void setNote(String note) {
        this.note = note;
    }
    public String getNote() {
        return note;
    }
}
//输出类
class MessageConsumer {
    public void print() {
        System.out.println(Thread.currentThread().getName() + " = " + Myutil.get().getNote());
    }
}
/*
 * ThreadLocal<>为泛型,类型为被操作类类型
 */
class Myutil {
    private static ThreadLocal<Message> threadlocal = new ThreadLocal<Message>();    //实例化该类
    public static void set(Message msg) {    //使用该类的set()方法,只能传递一个参数
        threadlocal.set(msg);    //该msg在传入该类时被保存一个currentThrad值,对应该线程
        }
    public static Message get() {
        return threadlocal.get();    //在获取msg时,只能过去对应标记的msg值
    }
}

public class TestDemo {
    public static void main(String[] args) throws Exception {
        new Thread(() -> {
            Message msg = new Message();
            msg.setNote("美国");
            Myutil.set(msg);    //设置msg属性并被ThreadLocal标记
            new MessageConsumer().print();    //运行用户A线程的变量
        },"用户A").start();
        
        new Thread(() -> {
            Message msg = new Message();
            msg.setNote("中国");
            Myutil.set(msg);
            new MessageConsumer().print();
        },"用户B").start();
    }
}


(使用场景:通过线程让某运行类工作,实例化该类工作需要的类型参数但不手动传入,由该类自身调用参数运行,我们只需要把参数放在全局变量ThreadLocal中,那么每个线程产生的运行类都会获取对应线程的参数)


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值