zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    APP Https双向认证抓包
    剖析XSS
    php连接mysql
    linux去掉某一字符开头的行
    memcached+php客户端
    memcached-repcached
    memcached+memadmin
    Linux GPT分区
    Linux查看文件夹大小
    linux挂载windwos共享文件
  • 原文地址:https://www.cnblogs.com/DreamDrive/p/6189271.html
Copyright © 2011-2022 走看看