ThreadLocal管理Connection

每一个用户都对应有一个单独线程,每一个线程都有一个数据库连接对象Connection对象接待它.

一个用户对应一个线程,这个线程中的Connection对象或者数据库连接对象是唯一的,且只能有一个.

怎么去获得这个数据库连接对象?(看下面的代码)

ThreadLocal还可以管理Hibernate中的session对象,还可以管理Struts2中的dispatherFileter和Spring中的东西.

每个线程都有一个独立的副本,这样会存在一个小问题.

如果线程特别多,对象特别大的话.这个时候会造成内存占用的比较大,内存泄露的问题.(这是一个非常严重的问题)

ThreadLocal 用于每一个线程都有一个对象的副本。“以空间换时间”

给了解决方案:

源码中继承了一个WeakReference类,弱引用.通过这个类解决了可能造成的内存泄露的问题.

一般的类,如果不继承WeakReference这个类,都是强引用的.

强引用比如说: String str = "xxx";  str被xxx引用着,如果引用不消失.

即使这个引用没有工作了,他们就一直会占用着内存.垃圾回收无法把他们回收掉.

如果是弱引用的,即使它饮用着,如果它不工作了...垃圾回收照样会把它们回收.

这就是ThreadLocal的解决内存泄露的问题.

但是仍然建议你使用ThreadLocal类中的remove()方法手动的移除掉.

 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException; /*
* 通过ThreadLocal来管理Connection对象.
* ThreadLocal还可以管理Hibernate中的session对象,还可以管理Struts2中的dispatherFileter和Spring中的东西.
* ThreadLocal 用于每一个线程都有一个对象的副本。“以空间换时间”
* 内存泄漏?-->弱引用:WeakReference
* String str = "xxx";
*
*/ public class ConnectionManager {
private static ThreadLocal<Connection> threadLocal = new ThreadLocal<Connection>(); private ConnectionManager(){} public static Connection getInstance(){
try {
Connection conn = threadLocal.get();
if(conn == null){
conn = DriverManager.getConnection("");//获取数据库连接对象
threadLocal.set(conn);
}
return conn;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
} }

ThreadLocal管理Connection的更多相关文章

  1. 转账示例(四):service层面实现(线程管理Connection,AOP思想,动态代理)(本例采用QueryRunner来执行sql语句,数据源为C3P0)

    用了AOP(面向切面编程),实现动态代理,service层面隐藏了开启事务.1.自行创建C3P0Uti,account数据库,导入Jar包 2.Dao层面 接口: package com.learni ...

  2. 转账示例(三):service层面实现(线程管理Connection)(本例采用QueryRunner来执行sql语句,数据源为C3P0)

    缺点:Service层面还是不应该出现关于事务的操作1.自行创建C3P0Uti,account数据库,导入Jar包 2.Dao层面 接口: package com.learning.dao; impo ...

  3. java笔记--用ThreadLocal管理线程,Callable<V>接口实现有返回值的线程

    用ThreadLocal管理线程,Callable<V>接口实现有返回值的线程 ThreadLocal在我的笔记"关于线程同步"的第5种方式里面有介绍,这里就不多说了. ...

  4. ThreadLocal管理登录信息

    通常在项目中,用户登录后,我们会将用户的信息存到session,如果想在其它地方获取session中的用户信息,我们需要先获取HttpServletRequest,再通过request.getSess ...

  5. 【java项目实战】ThreadLocal封装Connection,实现同一线程共享资源

    线程安全一直是程序员们关注的焦点.多线程也一直是比較让人头疼的话题,想必大家以前也遇到过各种各种的问题.我就不再累述了.当然,解决方案也有非常多,这篇博文给大家提供一种非常好的解决线程安全问题的思路. ...

  6. 用ThreadLocal管理事务

    1.适用场景 一个service,操作两个dao,要求两个dao为同一个事务,要么全成功,要么全失败.

  7. [转]利于ThreadLocal管理Hibernate Session

    摘自http://aladdin.iteye.com/blog/40986 在利用Hibernate开发DAO模块时,我们和Session打的交道最多,所以如何合理的管理Session,避免Sessi ...

  8. JDBC事务(三)ThreadLocal绑定Connection

    处理一个请求即开启一个线程,在三层中,执行三层中的方法都是用的同一个线程. 我们开启一个事务,使用conn.setAutoCommit(false); conn应该属于ado层,不应该出现在servi ...

  9. 利用ThreadLocal管理事务

    package com.itheima.util; import java.sql.Connection; import java.sql.SQLException; //封装了所有与事务有关的方法 ...

随机推荐

  1. 以太网MAC地址规范

    原文地址:http://blog.csdn.net/skyflying2012/article/details/40322563 之前一段时间在做网卡驱动的工作,现在产品量产,利用ifconfig e ...

  2. tp5,thinkphp5,隐藏index.php,隐藏入口文件

    一.找到/public/.htaccess文件 Apache: <IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews R ...

  3. Android学习指南之三十八:Android手势操作编程[转]

    手势操作在我们使用智能设备的过程中奉献了不一样的体验.Android开发中必然会进行手势操作方面的编程.那么它的原理是怎样的呢?我们如何进行手势操作编程呢? 手势操作原理 首先,在Android系统中 ...

  4. 【repost】 原生JS执行环境与作用域深入理解

    首先,我们要知道执行环境和作用域是两个完全不同的概念. 函数的每次调用都有与之紧密相关的作用域和执行环境.从根本上来说,作用域是基于函数的,而执行环境是基于对象的(例如:全局执行环境即window对象 ...

  5. Scala_类

    类 简单类 最简单的类的定义形式是: class Test1 {  //这里定义类的字段和方法} 可以使用new关键字来生成对象 var test = new Test1() 给类增加字段和方法 Un ...

  6. sql一些基本的语法

    1.if语句: 语法:IF(expr1,expr2,expr3) 其中,expr1是判断条件,expr2和expr3是符合expr1的自定义的返回结果. 用处:当从数据库中查询出来的结果需要转换成中文 ...

  7. ORA-01653: 表 xxxx 无法通过 8192 (在表空间 USERS 中) 扩展

    Oracle中增加表空间大小的四种方法 1:给表空间增加数据文件 ALTER TABLESPACE app_data ADD DATAFILE ‘D:\ORACLE\PRODUCT\10.2.0\OR ...

  8. JPA Annotation注解

    JPA & Hibernate 注解 先说说JPA和Hibernate的关系 JPA(Java Persistence API),是Java EE 5的标准ORM接口,也是ejb3规范的一部分 ...

  9. iOS_URI跳转方式多种地图导航的代码实践

    先来看一下我们要达到什么效果,就是当我们点导航的时候,会弹出下面这个选择列表. 当然,如果没有安装某个地图APP,那么对应的选项是不会出现的.检测APP是否安装,只要调用下面这个方法就可以了 [[UI ...

  10. linux常用命令(一)linux开关机、重启以及文本界面与图形界面互换

    1.开关机 reboot 重启: shutdown [-efFhknr][-t 秒数][时间][警告信息] 关机: shutdown [-efFhknr][-t 秒数][时间][警告信息] 关机: - ...