`
gerrard_ok
  • 浏览: 146234 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ThreadLocal分析

 
阅读更多
http://www.iteye.com/topic/757641

每个线程中都有ThreadLocalMap属性,是个map,key为ThreadLocal,value为存在ThreadLocal里的内容如:
private static ThreadLocal<List<String>> store = new ThreadLocal<List<String>>(){
		@Override
		protected List<String> initialValue() {
			// TODO Auto-generated method stub
			return new LinkedList<String>(); 
		}
	};
 List<String> list = store.get();  

多线程的时候,每个线程第一次调用store.get();方法时都会去调ThreadLocal的initialValue方法,初始化ThreadLocalMap里的value,多个线程的ThreadLocalMap共用一个ThreadLocal作为key,也就是每个线程都会new LinkedList一次,然后从ThreadLocal里拿。
因为LinkedList或是SimpleDateFormat都不是线程安全的,所以每个线程都需要自己创建,而不能共用一个静态的变量,多次使用会创建多个生命周期很短的实例,性能开销大,代替是将SimpleDateFormat作为参数传递下去,这样不好,还有一种方法是用ThreadLocal,每个线程只创建一次并且归属于本线程所有,是以空间换时间。
synchornized是以时间换空间
分享到:
评论

相关推荐

    ThreadLocal 内存泄露的实例分析1

    在 `LeakingServlet` 的 `doGet` 方法中,如果 `ThreadLocal` 没有设置值,那么会创建一个新的 `MyCounter` 并设置到 `ThreadLocal` 中。关键在于,一旦 `MyCounter` 被设置到 `ThreadLocal`,那么它将与当前线程...

    ThreadLocal_ThreadLocal源码分析_

    **ThreadLocal概述** ThreadLocal是Java中的一个线程局部变量类,它为每个线程创建了一个独立的变量副本。这意味着每个线程都有自己的ThreadLocal变量,互不干扰,提供了线程安全的数据存储方式。ThreadLocal通常...

    ThreadLocal源码分析

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

    ThreadLocal源码分析和使用

    ThreadLocal 源码分析和使用 ThreadLocal 是 Java 语言中的一种多线程编程机制,用于解决多线程程序的并发问题。它不是一个 Thread,而是一个 Thread 的局部变量。ThreadLocal 的出现是为了解决多线程程序中的共享...

    ThreadLocal_ThreadLocal源码分析_源码.zip

    通过分析ThreadLocal的源码,我们可以深入理解其内部机制。例如,`initialValue()`方法用于提供默认的初始值,`set()`方法如何将值放入ThreadLocalMap,`get()`方法如何获取值,以及`remove()`方法如何清理线程局部...

    ThreadLocal内存泄露分析

    【标题】:“ThreadLocal内存泄露分析” 在Java编程中,ThreadLocal是一个强大的工具类,它为每个线程提供了一个独立的变量副本,使得每个线程都可以独立地改变自己的副本,而不会影响其他线程所对应的副本。然而,...

    ThreadLocal原理分析图,visio软件打开

    ThreadLocal原理分析图,visio软件打开

    正确理解ThreadLocal.pdf

    3. **日志记录**:在多线程环境中,`ThreadLocal`可以用于维护每个线程的日志上下文,如线程ID、用户名等,便于日志信息的记录和分析。 4. **性能优化**:在某些计算密集型应用中,`ThreadLocal`可以用于缓存线程...

    threadLocal

    源码分析: 在Java的`ThreadLocal`实现中,每个线程都有一个`ThreadLocalMap`,它是`ThreadLocal`的一个内部类,用于存储线程局部变量。`ThreadLocalMap`使用弱引用作为键,目的是在线程不再引用ThreadLocal对象时,...

    ThreadLocal的用处

    6. **源码分析**: ThreadLocal类的核心在于`initialValue()`方法和`get()`方法。`initialValue()`是线程首次访问ThreadLocal变量时调用的,返回的是默认值。`get()`方法则会查找当前线程的ThreadLocalMap,如果...

    ThreadLocal的原理,源码深度分析及使用.docx

    ThreadLocal 的原理、源码深度分析及使用 ThreadLocal 是 Java 语言中的一种机制,用于实现线程本地存储,能够帮助开发者在多线程环境下解决变量访问安全的问题。下面将对 ThreadLocal 的原理、实现机制、使用方法...

    JDK的ThreadLocal理解(一)使用和测试

    **标题:“JDK的ThreadLocal理解(一)使用...通过以上分析,我们可以看到ThreadLocal在实现线程间数据隔离、简化多线程编程方面的作用。然而,使用时也要注意避免内存泄漏和过度依赖,合理规划其在系统架构中的位置。

    java并发包源码分析(3)ThreadLocal

    Java并发编程中,ThreadLocal是一个非常重要的类,它是解决线程安全问题的一个工具。ThreadLocal提供了一种在多线程环境下使用“共享变量”的方式,但是它实际上是为每个线程提供一个变量的副本,这样每个线程都可以...

    Synchronized与ThreadLocal

    #### 四、案例分析 假设有一个场景,需要为每个线程维护一个独立的计数器,而不希望线程之间互相影响。 1. **定义 ThreadLocal 类型的计数器:** ```java private static final ThreadLocal&lt;Integer&gt; ...

    java 中ThreadLocal实例分析

    "Java 中ThreadLocal实例分析" Java 中的 ThreadLocal 实例分析是指在多线程环境下,如何使用 ThreadLocal 来实现线程安全。ThreadLocal 是 Java 中的一种机制,用于在多个线程中实现变量的隔离。 在上面的代码中...

    ThreadLocal 线程本地变量 及 源码分析.rar_开发_设计

    以上是对ThreadLocal的简单介绍和源码分析,实际使用中还需要结合具体业务场景进行合理设计和优化。通过深入理解ThreadLocal的工作原理,可以帮助我们更好地利用这一工具,提高代码的并发性能和可维护性。

    简单分析Java线程编程中ThreadLocal类的使用共

    Java线程编程中的ThreadLocal类是一个非常重要的工具,它在多线程环境下提供了一种线程局部变量的机制。ThreadLocal并非是简单的变量,而是一种能够确保每个线程都拥有独立副本的变量容器。理解ThreadLocal的工作...

    ThreadLocal

    5. **源码分析**: - `ThreadLocal`类在`java.lang`包下,它的实现主要依赖于`Thread`类的成员变量`threadLocals`,这是一个`ThreadLocalMap`实例,`ThreadLocalMap`是`WeakReference&lt;ThreadLocal&lt;?&gt;&gt;`和`Object`...

    理解threadlocal

    通过以上分析,我们可以看到`ThreadLocal`为多线程环境下的编程提供了一种简洁优雅的解决方案。它不仅能够避免复杂的同步问题,还能有效地管理线程间的变量隔离。理解`ThreadLocal`的工作原理及其使用方法,可以帮助...

Global site tag (gtag.js) - Google Analytics