ThreadLocal管理Connection
ThreadLocal管理Connection
每一个用户都对应有一个单独线程,每一个线程都有一个数据库连接对象Connection对象接待它.
一个用户对应一个线程,这个线程中的Connection对象或者数据库连接对象是唯一的,且只能有一个.
怎么去获得这个数据库连接对象?(看下面的代码)
ThreadLocal还可以管理Hibernate中的session对象,还可以管理Struts2中的dispatherFileter和Spring中的东西.
每个线程都有一个独立的副本,这样会存在一个小问题.
如果线程特别多,对象特别大的话.这个时候会造成内存占用的比较大,内存泄露的问题.(这是一个非常严重的问题)
ThreadLocal 用于每一个线程都有一个对象的副本。“以空间换时间”
给了解决方案:
源码中继承了一个WeakReference类,弱引用.通过这个类解决了可能造成的内存泄露的问题.
一般的类,如果不继承WeakReference这个类,都是强引用的.
强引用比如说: String str = "xxx"; str被xxx引用着,如果引用不消失.
即使这个引用没有工作了,他们就一直会占用着内存.垃圾回收无法把他们回收掉.
如果是弱引用的,即使它饮用着,如果它不工作了...垃圾回收照样会把它们回收.
这就是ThreadLocal的解决内存泄露的问题.
但是仍然建议你使用ThreadLocal类中的remove()方法手动的移除掉.
2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.SQLException; 6 7 8 /* 9 * 通过ThreadLocal来管理Connection对象. 10 * ThreadLocal还可以管理Hibernate中的session对象,还可以管理Struts2中的dispatherFileter和Spring中的东西. 11 * ThreadLocal 用于每一个线程都有一个对象的副本。“以空间换时间” 12 * 内存泄漏?-->弱引用:WeakReference 13 * String str = "xxx"; 14 * 15 */ 16 17 public class ConnectionManager { 18 private static ThreadLocal<Connection> threadLocal = new ThreadLocal<Connection>(); 19 20 private ConnectionManager(){} 21 22 public static Connection getInstance(){ 23 try { 24 Connection conn = threadLocal.get(); 25 if(conn == null){ 26 conn = DriverManager.getConnection("");//获取数据库连接对象 27 threadLocal.set(conn); 28 } 29 return conn; 30 } catch (SQLException e) { 31 e.printStackTrace(); 32 } 33 return null; 34 } 35 36 }
ThreadLocal管理Connection相关推荐
- 小白学习spring第二天
第8节:Spring配置文件模块化 1.配置文件模块化的业务背景,为什么要进行配置文件模块化2.配置文件模块化的具体实现方式一: 创建多个并列的配置文件方式二: 创建一个主配置,多个从配置,主配置当中 ...
- Spring JDBC-Spring事务管理之ThreadLocal基础知识
文章目录 概述 ThreadLocal是什么 ThreadLocal的接口方法 ThreadLocal示例 与Thread同步机制的比较 Spring中使用ThreadLocal解决线程安全问题 概述 ...
- 5G 信令流程 — 5GC 的连接管理(CM,Connection Management)
目录 文章目录 目录 5GC 的连接管理 连接管理的状态模型 CM 状态模型 RRC Inactive 状态模型 CM-IDLE 切换到 CM-Connected 流程(RRC.N2 连接建立流程) ...
- 什么是ThreadLocal
顾名思义它是local variable(线程局部变量).它的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,使每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突.从线 ...
- (转)Spring中ThreadLocal的认识
我们知道Spring通过各种DAO模板类降低了开发者使用各种数据持久技术的难度.这些模板类都是线程安全的,也就是说,多个DAO可以复用同一个模板实例而不会发生冲突.我们使用模板类访问底层数据,根据持久 ...
- spring线程并发处理(ThreadLocal)
我们知道Spring通过各种DAO模板类降低了开发者使用各种数据持久技术的难度.这些模板类都是线程安全的,也就是说,多个DAO可以复用同一个模板实例而不会发生冲突. 我们使用模板类访问底层数据,根据持 ...
- ThreadLocal 和 InheritableThreadLocal
在学习ThreadLocal之前,建议先了解Java中的4种引用 一.先看一下Thread,ThreadMap,ThreadLocal的关系 Thread中持有一个ThreadLocalMap ,这里 ...
- JUC多线程:ThreadLocal 原理总结
1.什么是 ThreadLocal: ThreadLocal 提供了线程内部的局部变量,当在多线程环境中使用 ThreadLocal 维护变量时,会为每个线程生成该变量的副本,每个线程只操作自己线程中 ...
- Java并发编程—ThreadLocal底层原理
作者:Java3y 链接:https://www.zhihu.com/question/341005993/answer/793627819 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权, ...
最新文章
- PHP HashTable总结
- 【django】项目开发准备【1】
- 小程序 const moment = require('moment')_开源小程序精选
- 热烈祝贺我刊主编郑纬民教授被提名为中国工程院2017年院士增选候选人!
- Jenkins之Log Parse的使用
- linux 添加新用户时常用的操作
- 1亿中国人已被AI批改过作业
- 程序员高效学习,坚持十年就是大师
- LeetCode - Duplicate Emails
- 基于java网上商城源码设计
- 联想ts250进bios_联想Think TS250/TS550安装server 2008 R2/2012系统教程【一】
- SPI通信协议以及概念
- TCP/UDP 协议格式
- python報錯: OSError: Unable to locate Ghostscript on paths
- windows 7可用软件搜索贴~(转)(申请置顶)
- 对Android初学者学习中的几点建议
- SAP 采购合同案例教程金额合同前台
- 局域网与城域网(1)(网工)
- 冷库用电量计算机方式,冷库一般用电量如何估算
- 2个月获得职业技能大赛省赛银牌?!
热门文章
- #ps –ef_常用Linux中ps命令学习及ps aux与ps -ef的区别
- css使两个盒子并列_css如何去掉重叠部分的边框?
- matlab向量的角标,【MATLAB】利用冒号表达式获得子矩阵
- oracle描述dept,一些关于oracle驱动表的描述
- mysql查询结果导出excel_Mysql查询结果导出为Excel的几种方法
- django 开发中数据库可以怎样优化
- Flask设置、获取、删除cookies
- (3) Hibernate的查询 标准(Criteria)查询
- mysql集群搭建教程-mysql+windows篇
- android两个耳机能连两部手机吗,AirPods使用技巧:如何让耳机同时连接两台手机...