`

ThreadLocal的用法(小程序)

    博客分类:
  • java
阅读更多
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * 采用ThreadLocal封装Connection
 * @author Administrator
 *
 */
public class ConnectionManager {

 private static ThreadLocal<Connection> connectionHolder = new ThreadLocal<Connection>(); 
 
 public static Connection getConnection(){
  Connection conn = connectionHolder.get();
  //如果当前线程中没有绑定相应的Connection
  if(conn == null){
   try {
    JdbcConfig jdbcConfig = XmlConfigReader.getInstance().getJdbcConfig();  
    Class.forName(jdbcConfig.getDirverName());
    conn = DriverManager.getConnection(jdbcConfig.getUrl(), jdbcConfig.getUserName(), jdbcConfig.getPassword());
    //将Connection设置到线程变量中
    connectionHolder.set(conn);
   } catch (ClassNotFoundException e) {
    e.printStackTrace();
    throw new ApplicationException("系统错误,请联系系统管理员!");
   } catch (SQLException e) {
    e.printStackTrace();
    throw new ApplicationException("系统错误,请联系系统管理员!");
   }
  }

  return conn;
 }
 
 public static void closeConnection(){
  Connection conn = connectionHolder.get();
  if(conn != null){
   try {
    conn.close();
    //从ThreadLocal 中清除Connection
    connectionHolder.remove();
   } catch (SQLException e) {    
    e.printStackTrace();
   }
  }
 }
 
}

分享到:
评论

相关推荐

    Java多线程 之 临界区、ThreadLocal.docx

    如果在一个类的两个方法都使用`synchronized`,并且调用这些方法的线程持有相同的对象引用,那么这两个方法不能同时执行。 2. **ThreadLocal** ThreadLocal是一种线程局部变量,它为每个线程都创建了一个独立的...

    aop-log:项目正式命名为aop-log,基于Spring AOP,ThreadLocal实现方法埋点,埋点信息记录和自定义收集

    设计目的和场景:使用Spring Aop拦截程序,基本上都是同一个小异,不想日后每个项目都柏林都写一份这样的Aop拦截处理日志的代码,甚至可以进行代码入侵。重要的业务接口埋点,我想知道一些相对重要的请求方法的请求...

    美团面试,问了ThreadLocal原理,这个回答让我通过了

    例如,当`ThreadLocal`不再使用时,应该调用`remove()`方法清除其在`ThreadLocalMap`中的条目,以防止孤儿条目占用内存。另外,`ThreadLocal`不适合用于存储全局状态或持久状态,因为它仅在当前线程的生命周期内有效...

    线程锁+ThreadLocal.docx

    在`Consumer`线程的`run()`方法中,使用了`while`循环和`queue.isEmpty()`来检查队列是否为空。如果队列为空,`Consumer`会调用`wait()`方法,使得线程进入等待状态,释放锁,等待被唤醒。而当生产者在添加字符到...

    使用数据连结池jdbc连结

    在执行数据库操作的方法中,你可以使用`ThreadLocal`获取或初始化连接,然后在方法结束时释放连接。这样可以确保每个线程都有自己的连接,并且在操作完成后及时关闭。 ```java public class JdbcUtil { private ...

    Java 中 StringBuilder 在高性能用法总结

    总的来说,掌握StringBuilder的高性能用法,包括合理设置初始容量、利用StringBundler的优化策略以及重用StringBuilder实例,能够显著提升程序的运行效率。同时,理解并规避String的不可变性带来的性能损耗,是每个...

    Java定时器Timer使用方法详解

    Java定时器Timer使用方法详解 Java中的定时器Timer是使用Timer类和TimerTask类来实现的,Timer类负责计划任务的功能,而TimerTask类则是封装要执行的任务的类。下面将详细介绍Java定时器Timer的使用方法。 一、...

    c3p0 小例

    5. **使用和关闭连接**:在业务逻辑中,使用`getConnection()`方法获取连接,完成操作后,通过`closeConnection()`方法关闭连接并从ThreadLocal中移除,确保线程安全。 配置C3P0连接池时,可以根据应用的实际情况...

    When To Use Parallel-ForEach Or PLINQ.pdf

    在多核计算机上优化程序时,一个不错的起点是考虑程序是否可以被分割成可以在多个核心上并行执行的部分。如果解决方案可以被视作是针对大数据集中的每个元素执行的计算密集型操作,那么它就是利用.NET Framework 4中...

    多线程相关代码(V3)

    它有两种使用方式:修饰方法或代码块。当一个线程进入同步块或方法时,其他试图进入的线程会被阻塞,直到该线程退出。虽然相比Lock接口,它的功能相对简单,但使用方便且易于理解。 3. **Join方法**: `join()`...

    java并发编程.docx

    3. ScheduledThreadPool:支持定时和周期性执行任务,适用于计划任务,如示例所示,可以使用schedule和scheduleAtFixedRate方法来安排任务。 二、ThreadLocal ThreadLocal是Java提供的一种线程局部变量,每个线程...

    mat java 分析 文件 dump

    #### 一、MAT工具简介与使用方法 MAT(Memory Analyzer Tool)是一款由Eclipse基金会提供的免费内存分析工具,主要用于Java应用的堆内存分析,特别是针对那些产生了dump文件的应用程序。通过MAT,开发人员可以有效...

    java 同步方法

    【Java 同步方法】是Java编程中...总之,理解和优化Java同步方法的使用,是提高多线程应用程序性能和可伸缩性的核心。通过精细调整同步策略,可以有效地减少争用,提升并发性能,从而让程序在高负载环境下表现更佳。

    Java并发程序设计教程

    使用线程的经验:设置名称、响应中断、使用ThreadLocal - **设置线程名称**:在Java中启动线程时,建议给线程命名,这有助于诊断和监控。可以使用`setName()`方法或在构造函数中直接设定名称。 示例代码: ```...

    多线程-572e342b467d4057bc1bb089fa0a8483.pdf

    线程的终止方式有自然终止、Stop()方法(已过期不建议使用)、Suspend()挂起与resume()唤醒(同样已过期不建议使用)、以及使用interrupt()进行中断。 线程的优先级可以通过设置Thread类的priority属性来调整,范围...

    编写高质量代码 改善Java程序的151个建议 PDF高清完整版

    7. **并发编程**:掌握synchronized、volatile、ThreadLocal等并发工具的使用,遵循线程安全的最佳实践,避免死锁、活锁和饥饿现象。 8. **性能优化**:合理使用数据结构和算法,避免过度优化,使用StringBuilder...

    利用AOP来变更工作线程的名字,来快速过滤出一次请求的所有日志.docx

    在Java开发中,AOP(Aspect Oriented Programming,面向切面编程)是一种设计模式,它允许程序员定义“切面”,这些切面可以在程序执行的不同点(称为“连接点”)自动插入,例如在方法调用之前或之后。这种技术常...

    JAVA thread

    在Java编程语言中,线程(Thread)是执行单元,它允许程序同时执行多个任务。在"JAVA thread"这个主题中,我们主要关注的是如何在Java中创建...通过编写像"龟兔赛跑"这样的小程序,我们可以更好地理解和实践这些概念。

    java程序设计编码规范

    变量名和方法名使用小驼峰式(如methodName),常量全大写并用下划线分隔(如CONSTANT_NAME)。避免使用缩写,除非它们是广泛接受的行业标准。 2. **注释规范**:良好的注释能帮助他人理解代码意图。Javadoc用于类...

Global site tag (gtag.js) - Google Analytics