首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。各个线程中访问的是不同的对象。


另外,说ThreadLocal使得各线程能够保持各自独立的一个对象,并不是通过ThreadLocal.set()来实现的,而是通过每个线程中的new 对象 的操作来创建的对象,每个线程创建一个,不是什么对象的拷贝或副本。
过ThreadLocal.set()将这个新创建的对象的引用保存到各线程的自己的一个map中,每个线程都有这样一个map,执行
ThreadLocal.get()时,各线程从自己的map中取出放进去的对象,因此取出来的是各自自己线程中的对象,ThreadLocal实例是作
为map的key来使用的。 


如果ThreadLocal.set()进去的东西本来就是多个线程共享的同一个对象,那么多个线程的ThreadLocal.get()取得的还是这个共享对象本身,还是有并发访问问题。 



总结:  ThreadLocal.set()进去的对象会存在当前线程中的一个map中,并以当前ThreadLocal本身作为key,只能说这个map能保证唯一,map中存的对象如果是通过new存进去的话,没被另一个线程引用继续存入的话,则该对象对于该线程唯一,否则因是引用类型,可能存在多线程并发问题



测试代码:


  1. public static  ThreadLocal<String> threadLocal = new ThreadLocal<String>(); 
  2.   
  3.  public static void main(String[] args) { 
  4.    
  5.   Object[]  objects = new Object[]{1,2}; 
  6.   System.out.println(Arrays.toString(objects)); 
  7. //   
  8. // for (int i = 0; i< 10 ;i++) { 
  9. //    
  10. // final int j= i ; 
  11. // new Thread(new Runnable() { 
  12. //     
  13. // @Override 
  14. // public void run() { 
  15. //      
  16. // threadLocal.set(j+"-----------"+Thread.currentThread().getId()+"-----"+threadLocal.hashCode()); 
  17. // Thread.currentThread().getId(); 
  18. // try { 
  19. // Thread.currentThread().sleep(1000); 
  20. // } catch (InterruptedException e) { 
  21. // // TODO Auto-generated catch block 
  22. // e.printStackTrace(); 
  23. // } 
  24. // System.out.println(threadLocal.get()+"----------"+Thread.currentThread().getId()+"------"+"-----"+threadLocal.hashCode()); 
  25. // } 
  26. // }).start(); 
  27. // }

java 中的 ThreadLocal的更多相关文章

  1. Java中的ThreadLocal深入理解

    提到ThreadLocal,有些Android或者Java程序员可能有所陌生,可能会提出种种问题,它是做什么的,是不是和线程有关,怎么使用呢?等等问题,本文将总结一下我对ThreadLocal的理解和 ...

  2. 理解Java中的ThreadLocal

    提到ThreadLocal,有些Android或者Java程序员可能有所陌生,可能会提出种种问题,它是做什么的,是不是和线程有关,怎么使用呢?等等问题,本文将总结一下我对ThreadLocal的理解和 ...

  3. Java中的ThreadLocal详解

    一.ThreadLocal简介 多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为了保证线程安全,一般使用者在访问共享变量的时候需要进行额外的同步措施才能保证线 ...

  4. 谈谈Java中的ThreadLocal

    什么是ThreadLocal ThreadLocal一般称为线程本地变量,它是一种特殊的线程绑定机制,将变量与线程绑定在一起,为每一个线程维护一个独立的变量副本.通过ThreadLocal可以将对象的 ...

  5. 理解java中的ThreadLocal(转)

    一.对ThreadLocal概述 JDK API 写道: 该类提供了线程局部 (thread-local) 变量.这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的 ...

  6. 理解java中的ThreadLocal 专题

    ThreadLocal每一印象: public class IncrementWithStaticVariable{ private static int seqNum = 0; public int ...

  7. Java中的ThreadLocal

    关于 ThreadLocal,我们经常用它来解决多线程并发问题,那它究竟是如何做到的?今天就让我们来好好看一下. 从源码入手 首先,让我们看看 ThreadLocal 类中的介绍: This clas ...

  8. Java中的ThreadLocal使用

    ThreadLocal用于下面的场景: 1. 不允许多个线程同时访问的资源 2. 单个线程存活过程只使用一个实例 官方定义如下: This class provides thread-local va ...

  9. Java ThreadLocal Example(java中的ThreadLocal例子)

    Java ThreadLocal is used to create thread local variables. We know that all threads of an Object sha ...

随机推荐

  1. HDU 5402 Travelling Salesman Problem(棋盘染色 构造 多校啊)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5402 Problem Description Teacher Mai is in a maze wit ...

  2. 所有标准API

    序号 系统版本 模块 应用场景 类型 API/接口 参数规格 样例代码 备注 登记者 登记时间 关键字 1 12.1.3 AP 付款核销 API ap_pay_invoice_pkg.ap_pay_i ...

  3. java 多态的好处

    /* 对象的多态性. class 动物{} class 猫 extends 动物{} class 狗 extends 动物{} 猫 x = new 猫(); 动物 x = new 猫();//一个对象 ...

  4. Web应用的演变以及网络应用程序的架构的优缺点

    (1)主机/终端  特点:      主机负责所有的计算(处理业务),      终端只负责输入输出(不做任何计算).  优点:      可靠,安全,i/o能力强.  缺点:      昂贵,扩展困 ...

  5. 使用Qt Creator 2.60编写C/C++程序

    使用Qt Creator 2.60编写C/C++程序(Windows7-64bit和Ubuntu12.10-64bit). 一.Windows7-64bit +MinGW: 从官网下载qt creat ...

  6. Nginx中Laravel的配置

    server { listen 80; server_name sub.domain.com; set $root_path '/var/www/html/application_name/publi ...

  7. HDUOJ---2546 饭卡

    饭卡 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

  8. HDUOJ-----Be the Winner

    此题用到的概念: [定义1]:若一堆中仅有一个石子,则被称为孤单堆.若大于1个,则称为充裕堆. [定义2]:T态中,若充裕堆的堆数大于等于2,则称为完全利他态,用T2表示:若充裕堆的堆数等于0,则称为 ...

  9. CSS:使用CSS3将一个div水平和垂直居中显示

    使用css3将一个div水平和垂直居中显示 方案一: div绝对定位水平垂直居中[margin:auto实现绝对定位元素的居中], 代码两个关键点:1.上下左右均0位置定位: 2.margin: au ...

  10. XP和Win 7双系统安装说明和注意事项

    安装前说明: 1.先装XP,再装Windows 7,最好不要反过来,不然XP不会把Windows 7的启动管理器给覆盖掉,会麻烦些.总之遵循“旧版本到新版本”安装原则. 2.如果分区不够大,请用以下软 ...