• ThreadLocal理解和使用


    一、连接池和ThreadLocal

    找了不少关于连接池和ThreadLocal的知识,最简单直白并且能够以我能力理解的:用连接池是为了缓存已经打开的连接,提高性能,解决资源频繁分配问题;用ThreadLocal是为了多个数据库操作是用的同一个连接,是为了事务。

    ThreadLocal的几种方法:

    • void set(Object value)设置当前线程的线程局部变量的值。
    • public Object get()该方法返回当前线程所对应的线程局部变量。
    • public void remove()将当前线程局部变量的值删除,目的是为了减少内存的占用,该方法是JDK 5.0新增的方法。需要指出的是,当线程结束后,对应该线程的局部变量将自动被垃圾回收,所以显式调用该方法清除线程的局部变量并不是必须的操作,但它可 以加快内存回收的速度。
    • protected Object initialValue()返回该线程局部变量的初始值,该方法是一个protected的方法,显然是为了让子类覆盖而设计的。这个方法是一个延迟调 用方法,在线程第1次调用get()或set(Object)时才执行,并且仅执行1次。ThreadLocal中的缺省实现直接返回一个null。

    一般步骤:从连接池中获取connection,在set到ThreadLocal中,再从ThreadLocal中get。

    二、ThreadLocal使用

     1 //数据库连接URL
     2     private static final ThreadLocal<Connection> ConnectionHolder=new ThreadLocal<Connection>();
     3     private static String mysqlurl = "jdbc:mysql://localhost:3306/test?"
     4             + "user=root&password=root&useUnicode=true&characterEncoding=UTF8";
     5     //数据库连接
     6     public static void setConnection() throws Exception{
     7         Connection conn=null;
     8         conn=DriverManager.getConnection(mysqlurl);
     9         ConnectionHolder.set(conn);
    10     }
    11     
    12     //获取数据库连接
    13     public static Connection getConnection() throws Exception{
    14         setConnection();
    15         return ConnectionHolder.get();
    16     }
    17     //连接释放
    18     public static void removeConnection(Connection conn){
    19         if(conn!=null){
    20             try {
    21                 conn.close();
    22             } catch (SQLException e) {
    23                 // TODO Auto-generated catch block
    24                 e.printStackTrace();
    25             }
    26             conn=null;
    27         }
    28     }

    三、连接池问题

    连接池暂时还没涉及到,觉得是个比较重要的知识点,暂且放一下,今后使用的时候,再深入了解。

  • 相关阅读:
    C# WinForm开发系列 OpenSource Controls
    Jenkins_FileCenter_Deploy
    DatabaseOperation_DBM Kill inactive connection
    如何在linux下检测内存泄漏
    基本数据类型
    Linux Kernel Makefiles
    让GCC编译关键字“__attribute__”给你带来方便
    内核空间和用户空间
    程序人生--一个程序员对学弟学妹建议
    arm linux
  • 原文地址:https://www.cnblogs.com/Nouno/p/5737301.html
Copyright © 2020-2023  润新知