关于Threadlocal
2016-05-30 22:14
162 查看
ThreadLocal类用于创建一个线程本地变量
在Thread中有一个成员变量ThreadLocals,该变量的类型是ThreadLocalMap,也就是一个Map,它的键是ThreadLocal,值就是变量的副本。通过ThreadLocal的get()方法可以获取该线程变量的本地副本,在get()方法之前要首先set(),否则就要重写initialValue()方法。
ThreadLocal的使用场景:
数据库连接:在多线程中,如果使用懒汉式的单例模式创建Connection对象,由于该对象是共享的,那么必须要使用同步方法保证线程安全,这样当一个线程在连接数据库时,那么另外的一个线程只能等待,这样就造成性能降低。如果改为哪里要连接数据库就来进行连接,那么就会频繁的对数据库进行连接,性能还是不高。这时使用ThreadLocal就可以既保证线程安全又可以让性能不会太低。但是ThreadLocal的缺点是占用了较多的空间。
ThreadLocal存放的值是线程封闭、线程间互斥的。
主要用于线程内共享一些数据,避免通过参数来传递。
ThreadLocal和多线程并发没有什么关系。
ThreadLocal模式是为了解决单线程内的跨类跨方法调用的。
ThreadLocal不是用来解决对象共享访问问题的,而只要是提供了保持对象的方法和避免参数传递的方便对象访问的方式。一般情况下,通过ThreadLocal.set()到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。各个线程中访问的是不同对象。
在Thread中有一个成员变量ThreadLocals,该变量的类型是ThreadLocalMap,也就是一个Map,它的键是ThreadLocal,值就是变量的副本。通过ThreadLocal的get()方法可以获取该线程变量的本地副本,在get()方法之前要首先set(),否则就要重写initialValue()方法。
ThreadLocal的使用场景:
数据库连接:在多线程中,如果使用懒汉式的单例模式创建Connection对象,由于该对象是共享的,那么必须要使用同步方法保证线程安全,这样当一个线程在连接数据库时,那么另外的一个线程只能等待,这样就造成性能降低。如果改为哪里要连接数据库就来进行连接,那么就会频繁的对数据库进行连接,性能还是不高。这时使用ThreadLocal就可以既保证线程安全又可以让性能不会太低。但是ThreadLocal的缺点是占用了较多的空间。
ThreadLocal存放的值是线程封闭、线程间互斥的。
主要用于线程内共享一些数据,避免通过参数来传递。
ThreadLocal和多线程并发没有什么关系。
ThreadLocal模式是为了解决单线程内的跨类跨方法调用的。
ThreadLocal不是用来解决对象共享访问问题的,而只要是提供了保持对象的方法和避免参数传递的方便对象访问的方式。一般情况下,通过ThreadLocal.set()到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。各个线程中访问的是不同对象。
相关文章推荐
- 开始写blog了
- [bzoj4570][scoi2016]妖怪 二分区间
- 手把手教你:用Qt做一个漂亮的电子时钟(纯代码)
- 替代图片+文字按钮问题
- centos6.5 搭建RTSP流媒体服务器(Darwin Streaming Server)
- Leetcode之unique-binary-search-trees
- JavaScript创建对象方式总结
- 极验验证码完整教程
- 改变设置文本框占位文字和图片
- happens-before知识
- java 集合框架(4)NavigableSet接口
- Creational Patterns Part 3/5: Singleton Pattern
- HDU-1090
- 冒泡排序
- 【java并发】ThreadLocal类以及应用技巧
- 个人工作总结07(第二阶段)
- gitlab 错误处理
- 使用DatePickerDialog和TimePickerDialog设置时间
- XenServer中Fast Copy与Full Copy的区别
- struts2中配置多个struts.xml配置文件