ThreadLocal 线程局部变量

下面的链接详细介绍了线程池  :

https://www.cnblogs.com/dolphin0520/p/3932921.html

 

ThreadLocal类:

该类提供了线程局部变量,它是一个池 Map<Thread.currentThread,locObj>,

池中为每个线程保存一个独立的局部变量,

每个线程可以从这个池中读取或设置自己的局部变量。

public class ThreadLocalDemo {
	//线程局部变量池
	//private static ThreadLocal<Object> t = new ThreadLocal<Object>();
	private static MyThreadLocal<Object> t=new MyThreadLocal<Object>();
	
	public static Object getValue(){
		//System.out.println(Thread.currentThread());
		Object obj=t.get();
		if(obj==null){
			System.out.println("没有....");
			Random r=new Random();
			obj=r.nextInt(100);
			t.set(obj);
		}
		return obj;
	}
}

这里用自己写的一个类当做ThreadLoacal;

package cn.hncu.ThreadLoc;

import java.util.HashMap;
import java.util.Map;

public class MyThreadLocal<T> {
	
   private Map<Thread,Object> map=new HashMap<Thread, Object>();
   
   public Object get(){
	   Thread curThread =Thread.currentThread();
	   return map.get(curThread);
   }
   
   public Object set(Object obj){
	   Thread curThread=Thread.currentThread();
	   return map.put(curThread, obj);
   }
}

测试类:

package cn.hncu.ThreadLoc;

public class Hello {
	public void aaa(){
		Object obj3 = ThreadLocalDemo.getValue();
		System.out.println("obj3:"+obj3);
	}
	public void bbb(){
		Object obj5 = ThreadLocalDemo.getValue();
		System.out.println("obj5:"+obj5);
	}
}


package cn.hncu.ThreadLoc;

import org.junit.Test;

public class ThreadLocTest {
	@Test
	public void demo1() {
		System.out.println(Thread.currentThread());
		Object obj1 = ThreadLocalDemo.getValue();
		Object obj2 = ThreadLocalDemo.getValue();
		System.out.println(obj1 + "," + obj2);
		System.out.println(obj1 == obj2);// true
	}

	@Test
	public void demo2() {
		// System.out.println(Thread.currentThread());
		Object obj1 = ThreadLocalDemo.getValue();
		Object obj2 = ThreadLocalDemo.getValue();
		System.out.println("obj1:" + obj1);
		System.out.println("obj2:" + obj2);
		System.out.println(obj1 == obj2); // true
		new Hello().aaa();
		
		new Thread() {

			/* (non-Javadoc)
			 * @see java.lang.Thread#run()
			 */
			@Override
			public void run() {
				Object obj4 = ThreadLocalDemo.getValue();
				System.out.println("obj4:"+obj4);
				new Hello().bbb();
			}
		   
		}.start();
	}

}

demo1:

demo2:

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值