关于ThreadLocal的问题

关于ThreadLocal的问题

程序中为什么要使用ThreadLocal这个泛型类,直接用SqlSession类不可以吗?对这个不太理解,请老师解释一下,ThreadLocal类的使用场景有哪些?

正在回答

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

1回答

同学你好:

1、程序中为什么要使用ThreadLocal这个泛型类

ThreadLocal 是 JDK底层提供的一个解决多线程并发问题的工具类,可以防止各个线程之间的变量互不干扰,适用于高并发编程,一般用来解决数据库连接、Session管理等。

这里使用到 ThreadLocal ,是为了在多线程情况下,可以安全的关闭当前线程持有的sqlSession对象。

2、ThreadLocal类的使用场景有哪些

ThreadLocal<T>其实可以看做是与线程绑定的一个变量,用于线程间的数据隔离。ThreadLocal为每一个线程都提供了变量的副本,使得每个线程在某一时间访问到的并不是同一个对象,这样就隔离了多个线程对数据的数据共享。

明白了它能做到什么。我们就知道什么时候需要用了。也就是在使用线程不安全的类的情况下,在一个线程中修改不影响其他线程的使用的情况下,使用ThreadLocal来隔离这个对象是比较合适的。


如果解答了同学的疑问,望采纳~

祝学习愉快~

  • 慕沐8221787 提问者 #1
    SqlSession是一个什么概念,与ThreadLocal<T>之间是什么关系?
    2019-11-23 15:47:19
  • 芝芝兰兰 回复 提问者 慕沐8221787 #2
    同学你好,他们之间没有特定关系。1、SqlSession是MyBatis的核心,通过SqlSession可以实现增删改查等一系列操作,例如视频中的sqlSession.selectList,可以执行指定的查询操作并返回结果。2、ThreadLocal<T>这里T就像占位符一般的存在。在实际使用中,可以把期望的类写到这里。比如ThreadLocal<SqlSession>,这就指定了使用这个threadLocal对象的get方法的返回值是SqlSession。仅此而已。祝学习愉快~
    2019-11-23 18:27:09
  • 慕沐8221787 提问者 #3
    如果在程序中多次访问数据库,就会创建多个SqlSession,那threadLocal对象的get方法获取到的是哪个SqlSession呢,这个之间怎么对应的?
    2019-11-23 18:48:38
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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