java多线程(二)---------------ThreadLocal总结
2017-09-21 17:18
232 查看
ThreadLocal
1、 理解:
很多地方叫做线程本地变量,也叫做线程本地存储。ThreadLocal为变量在每个线程中创建了一个副本,那么每个线程可以访问自己内部的副本变量
2、 总结:
a. 实际的通过ThreadLocal创建的副本是存储在每个线程自己的threadLocals对象中的
b. 为何ThreadLocals的类型ThreadLocalMap的键值为ThreadLocal对象,因为每个线程中可有多个ThreadLocal变量,就像下面代码中的longLocal和Stringlocal
c. 在进行get之前,必须先set,否则会报空指针异常
d. 如果想在get之前不需要set就能正常访问的话,必须重写initialValue()方法 ????
3、 THreadLocal的应用场景
常见的应用场景为: 用来解决数据库连接、Session管理等。
如:
1、 理解:
很多地方叫做线程本地变量,也叫做线程本地存储。ThreadLocal为变量在每个线程中创建了一个副本,那么每个线程可以访问自己内部的副本变量
2、 总结:
a. 实际的通过ThreadLocal创建的副本是存储在每个线程自己的threadLocals对象中的
b. 为何ThreadLocals的类型ThreadLocalMap的键值为ThreadLocal对象,因为每个线程中可有多个ThreadLocal变量,就像下面代码中的longLocal和Stringlocal
c. 在进行get之前,必须先set,否则会报空指针异常
d. 如果想在get之前不需要set就能正常访问的话,必须重写initialValue()方法 ????
3、 THreadLocal的应用场景
常见的应用场景为: 用来解决数据库连接、Session管理等。
如:
// 数据库连接: protected static final String DB_URL = null; private static ThreadLocal<Connection> connectionHolder = new ThreadLocal<Connection>() { @Override protected Connection initialValue() { return DriverManager.getConnection(DB_URL); } }; // Session管理: private static ThreadLocal threadSession = new ThreadLocal(); public static Session getSession() throws Exception { Session s = (Session)threadSession.get(); if ( s == null ) { s = getSessionFactory().openSession(); threadSession.set(s); } }
相关文章推荐
- JAVA多线程实现的三种方式
- java多线程-爬电影天堂上的电影下载地址
- 关于java多线程和juc的详细介绍 收藏
- java多线程(九)线程中断
- Java多线程一(基础及线程状态转换)
- java多线程详解(1)-多线程入门
- Java多线程中join方法的理解
- Java多线程实现同时进行小球的自由落体与平抛
- java多线程 synchronized volatile Atomic LOCK的使用
- java多线程
- java多线程之Executors线程池
- Java多线程和并发编程实践学习总结---提高篇1
- JAVA多线程机制之线程创建
- java多线程执行计数相关类
- JAVA多线程-Lock的使用(四)-读写锁ReentrantReadWriteLock
- java多线程
- java多线程-使用notify和wait完成多线程的顺序执行
- Java多线程
- java多线程(一) volatile与synchronized区别
- Java多线程-线程的调度(守护线程)