threadLocal 对象在这里起什么作用?

threadLocal 对象在这里起什么作用?

我们在 SqlSessionFactoryUtils 里创建了一个 ThreadLocal 静态实例对象里面带个 sqlSession,但在 UserDao 中并没有通过这种方式获取这个 sqlSession,在 userDao 中使用 openSession() 获得,我打印了下这两个 session,并不是一个对象,那么在 ThreadLocal 对象里放个 session 里有什么用?

http://img1.sycdn.imooc.com//climg/5aa541dd000149d716361033.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
一叶知秋519 2018-03-12 14:14:09

打印的这两个sqlSession,sqlSession有值,sqlSession2是空值;

此时两个不是同一个对象,如果想要是同一对象的话,应该是重写生成sqlSession的方法,通过threadLocal.set(sqlSession);将sqlSession加入到threadLocal内。

ThreadLocal是jdk1.2以后加入的,当很多线程需要多次使用同一个对象,并且需要该对象具有相同初始化值的时候建议使用ThreadLocal

祝学习愉快!

  • 提问者 walkingway #1
    我的意思是老师的代码中,既然没有用到 threadLocal 中的 sqlSession,那么在 SqlSessionFactoryUtils 工厂方法类为啥还要创建各 threadLocal 对象 public static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>(); 当很多线程需要多次使用同一个对象,并且需要该对象具有相同初始化值的时候建议使用ThreadLocal 在老师的代码中用到了上面这个特性了吗?还是不很懂,希望老师详细说说
    2018-03-12 19:59:49
  • 好帮手慕珊 回复 提问者 walkingway #2
    老师在代码中其实并没有实际用到LocalThread对象,只是简单介绍了一下。如果想用的话,需要重写openSession()方法,然后调用sqlSessionFactory的openSession()方法去获取一个SqlSession,然后将获取到的SqlSession使用localThread的set()方法存储起来。祝学习愉快!
    2018-03-13 09:18:26
  • 提问者 walkingway 回复 好帮手慕珊 #3
    哦,明白了,谢谢
    2018-03-13 09:47:55
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Java数据库开发与实战应用2018版
  • 参与学习           人
  • 提交作业       277    份
  • 解答问题       4297    个

Java数据库开发的必备技能,从流行的MySQL数据库开始,到Java原生的数据库管理接口JDBC的使用,再到常用的数据持久化框架MyBatis,让你向Java工程师的目标又迈进了一步!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师