【第22期】观点:IT 行业加班,到底有没有价值?

关于Threadlocal

原创 2016年05月30日 22:14:58

ThreadLocal类用于创建一个线程本地变量


在Thread中有一个成员变量ThreadLocals,该变量的类型是ThreadLocalMap,也就是一个Map,它的键是ThreadLocal,值就是变量的副本。通过ThreadLocal的get()方法可以获取该线程变量的本地副本,在get()方法之前要首先set(),否则就要重写initialValue()方法。


ThreadLocal的使用场景:

数据库连接:在多线程中,如果使用懒汉式的单例模式创建Connection对象,由于该对象是共享的,那么必须要使用同步方法保证线程安全,这样当一个线程在连接数据库时,那么另外的一个线程只能等待,这样就造成性能降低。如果改为哪里要连接数据库就来进行连接,那么就会频繁的对数据库进行连接,性能还是不高。这时使用ThreadLocal就可以既保证线程安全又可以让性能不会太低。但是ThreadLocal的缺点是占用了较多的空间。


ThreadLocal存放的值是线程封闭、线程间互斥的。


主要用于线程内共享一些数据,避免通过参数来传递。


ThreadLocal和多线程并发没有什么关系。


ThreadLocal模式是为了解决单线程内的跨类跨方法调用的。


ThreadLocal不是用来解决对象共享访问问题的,而只要是提供了保持对象的方法和避免参数传递的方便对象访问的方式。一般情况下,通过ThreadLocal.set()到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。各个线程中访问的是不同对象。

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

Java ThreadLocal

ThreadLocal类,代表一个线程局部变量,通过把数据放在ThreadLocal中,可以让每个线程创建一个该变量的副本。也可以看成是线程同步的另一种方式吧,通过为每个线程创建一个变量的线程本地副本...

ThreadLocal原理及使用

一,实现原理         ThreadLocal,ThreadLocalMap(ThreadLocal的静态内部类),Thread三个类。         <img src="http://dl2.iteye.com/upload/attachment/0114/1002/106f6ae0-

彻底理解ThreadLocal

转载自:http://blog.csdn.net/lufeng20/article/details/24314381/ ThreadLocal是什么   早在JDK 1.2的版本中就提...

JavaThread-ThreadLocal笔记

[b]1.ThreadLocal简介[/b] 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。 当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本. 最常见的ThreadLocal使用场景为 用来解决 数据库连接、Session管理等. [b]2.部分源码[/b] ThreadLocal中存在ThreadLoca

c3p0数据库连接池+threadlocal线程池+DbUtils 进行数据库的操作

为什么要把连接的数据库对象放到threadlocal线程池中?在用户进行数据库访问的时候,我们应该限制他们来对数据库的连接获取个数,应该没人仅限一个,这样可以减轻服务器的负担,并且这种方式能够让其他对...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)