Java多线程基础(4):线程本地存储

之前在牛客网的中级项目实战中,有使用线程本地存储ThreadLocal来保存登录用户的信息,以便后续调用,这里专门记录下它的特性。
线程本地存储在多线程里的应用是解决多任务对共享资源的冲突问题,它可以根除对变量的共享,它可以为使用相同变量/对象的每个不同线程都创建不同的存储,将为每个线程管理其各自的副本。
如下是一个通过ThreadLocal来管理各自Integer对象的案例:

public class Accessor implements Runnable {
	public int id;

	public Accessor(int id) {
		super();
		this.id = id;
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		ThreadLocalVariableHolder.increment();
		System.out.println(this);
		Thread.yield();
	}
	public String toString() {
		return "#"+id+":"+ThreadLocalVariableHolder.get();
	}

}


public class ThreadLocalVariableHolder {
	private static ThreadLocal<Integer> value=new ThreadLocal<Integer>() {
       private Random rand=new Random(45);

		@Override
		protected synchronized Integer initialValue() {
			// 当get()无值时,为每个线程的调用创建初始化值
			return rand.nextInt(1000);
		}				
	};
	
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值