java--本地线程
Posted xanlv
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java--本地线程相关的知识,希望对你有一定的参考价值。
同一个线程(用户)拿到同一个对象
package cn.hncu.threadLocalUtil;
import java.util.Random;
public class ThreadLocalUtil
private static ThreadLocal<Object> t=new ThreadLocal<Object>();
//下面这一句是演示使用我们自己的MyThreadlocal
//线程管理池 Map<Thread,Object>
// private static MyThreadLocal<Object> t=new MyThreadLocal<Object>();
public static Object getObj()
Object obj=t.get();
if(obj==null)
Random r=new Random();
obj=r.nextInt(200);
t.set(obj);
return obj;
package cn.hncu.threadLocalUtil;
public class Hello
public static void print()
Object obj3=ThreadLocalUtil.getObj();
Object obj4=ThreadLocalUtil.getObj();
System.out.println("obj3:"+obj3);
System.out.println("obj4:"+obj4);
System.out.println(obj3==obj4);
package cn.hncu.threadLocalUtil;
import org.junit.Test;
public class Client
@Test
public void ma()
Object obj1=ThreadLocalUtil.getObj();
Object obj2=ThreadLocalUtil.getObj();
System.out.println("obj1:"+obj1);
System.out.println("obj2:"+obj2);
System.out.println(obj1==obj2);
//测试结果: obj1,obj2,obj3和obj4都是同一个对象 ----因为它们是同一个线程
// obj5和obj6是同一个对象,但 这两个对象和上面的obj1~obj4是不同的。因为这两个是另一个线程中获取出来的
@Test
public void threadDemo()
Object obj1=ThreadLocalUtil.getObj();
Object obj2=ThreadLocalUtil.getObj();
System.out.println("obj1:"+obj1);
System.out.println("obj2:"+obj2);
System.out.println(obj1==obj2);
Hello.print();
System.out.println("======");
new Thread()
public void run()
Object obj5=ThreadLocalUtil.getObj();
Object obj6=ThreadLocalUtil.getObj();
System.out.println("obj5:"+obj5);
System.out.println("obj6:"+obj6);
System.out.println(obj5==obj6);
.start();
理解ThreadLocal原理,写一个MyThreadLocal模拟ThreadLocal类的原理功能
package cn.hncu.threadLocalUtil;
import java.util.HashMap;
import java.util.Map;
//自己模拟ThreadLocal的功能,便于大家理解该类。
//承认:虽然我们把表面功能模拟出来,但ThreadLocal真正的功能远远比这强,比如内存管理
public class MyThreadLocal<Object>
Map< Thread, Object> map=new HashMap<Thread, Object>();
public Object get()
Thread t=Thread.currentThread();
return map.get(t);
public void set(Object obj)
Thread t=Thread.currentThread();
map.put(t, obj);
以上是关于java--本地线程的主要内容,如果未能解决你的问题,请参考以下文章