ThreadLocal是什么

在本机单个jvm下,理解一下单例模式和 ThreadLocal,希望对初学者有所帮助。

1。研究单例

单例的简单源码

<------------------------------------------------------------------------------------------->

public class CarFactory {
 //线程级共享的
 private static final ThreadLocal cars=new ThreadLocal();
 //持有的本身的实例
 private static final CarFactory single=new CarFactory();
 //私有的构造器
 private CarFactory(){
  
 }
 //返回本身持有的实例
 public static CarFactory getInstance(){
  return CarFactory.single;
 }
 //返回一个car的实例
 public  Car makeCar(){
  //获得一个汽车
  Car car=(Car)cars.get();
  if(car==null){
   car=new Car();
   cars.set(car);
  }
  return car;
 }
}
<---------------------------------------------------------------------------------------------->

Test类源码 ,实现了Runnable接口

<------------------------------------------------------------------------------------------->

public class Test implements Runnable {

 public static void main(String[] args) {
  Test test=new Test();
  //本线程执行
  test.run();
  //新开一个线程执行
  new Thread(test).start();
 }

 public void run() {
  //获得single的实例
  CarFactory factory=CarFactory.getInstance();
  //打印出该实例
  System.out.println(Thread.currentThread().hashCode()+":"+factory);
  //获得当前汽车
  Car car=factory.makeCar();
  System.out.println(Thread.currentThread().hashCode()+":"+car);
  //再造一辆
  car=factory.makeCar();
  System.out.println(Thread.currentThread().hashCode()+":"+car);
 }

}

<---------------------------------------------------------------------------------------------->

运行结果:

线程1                                                   线程2
26399554:CarFactory@6b97fd     16164678:CarFactory@6b97fd
26399554:Car@5224ee                 16164678:Car@15ff48b     
26399554:Car@5224ee                 16164678:Car@15ff48b     

结论:两个线程获得的为同一个实例,造了2辆车,每个线程只有一辆。

2。ThreadLocal研究

ThreadLocal是什么
ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是thread local variable(线程局部变量)。也许把它命名为ThreadLocalVar更加合适。线程局部变量(ThreadLocal)其实的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。从线程的角度看,就好像每一个线程都完全拥有该变量。

从上例看出,static的 TheadLocal 针对每个不同的线程保存了一份数值,而线程之间变量值毫无关系。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值