ThreadLocal使用

ThreadLocal

 

1.Threadlocal能够保证一个变量能够在多线程环境下保持互不影响,主要原理是,每一个线程都有自己的内存空间。而ThreadLocal为每一个线程分配一个变量副本,保存在线程自己的内存空。当线程销毁时,变量副本也会跟着被回收。    

package com.test.util;

public class Test {

	public static void main(String[] args) {
		//初始化一个对象,供4个线程同时访问。
		MyCount myCount=new MyCount();
		Thread t1=new MyThread(myCount);
		Thread t2=new MyThread(myCount);
		Thread t3=new MyThread(myCount);
		Thread t4=new MyThread(myCount);
		t1.start();
		t2.start();
		t3.start();
		t4.start();
	}
	
}

class MyCount{
	
	//设置初始值为11.
	public static ThreadLocal<Integer> count=new ThreadLocal<Integer>(){
		protected Integer initialValue() {
			return 11;
		};
	};
	
	//获取下一个数,增加1.
	public int  nextValue(){
		count.set(count.get()+1);
		return count.get();
	}
}

class MyThread extends Thread{
	
	private MyCount count;
	
	public  MyThread(MyCount count) {
		this.count=count;
	}
	
	@Override
	public void run() {
		for(int i=0;i<10;i++){
			System.out.println(Thread.currentThread().getName()+":"+count.nextValue());
		}
	}
}


结果:

Thread-0:12
Thread-0:13
Thread-0:14
Thread-0:15
Thread-0:16
Thread-0:17
Thread-0:18
Thread-0:19
Thread-1:12
Thread-1:13
Thread-1:14
Thread-1:15
Thread-1:16
Thread-1:17
Thread-1:18
Thread-1:19
Thread-1:20
Thread-1:21
Thread-0:20
Thread-0:21
Thread-2:12
Thread-2:13
Thread-2:14
Thread-2:15
Thread-2:16
Thread-2:17
Thread-2:18
Thread-2:19
Thread-2:20
Thread-2:21
Thread-3:12
Thread-3:13
Thread-3:14
Thread-3:15
Thread-3:16
Thread-3:17
Thread-3:18
Thread-3:19
Thread-3:20
Thread-3:21

2.主要常用的方法

      set();设置值

   get();获取值

 initValue()初始化值

    而且ThreadLocal支持泛型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值