在J2ee web中我们经常使用ThreadLocal缓存数据库连接对象,ThreadLocal类可以保证同一个线程中只持有同一个对象的引用,由于使用了弱引用,所以在使用完之后jvm会自动销毁这些绑定对象。ThreadLocal类使用到弱引用把对象绑定到当前线程中,为每一个线程提供一份copy,如果没有强引用或者是软引用指向改对象时候,每次垃圾回收器启动时候便回收该对象。在http请求中,使用ThreadLocal更加容易完成这个请求的过程,尽可能使用同一个数据库连接对象,每次使用完成之后,jvm就会自动清除数据库连接对象。
代码如下:
public class ConnectionFactory{
private final ThreadLocal<connection> connections = new ThreadLocal<Connection>();
//other varables and methods
public Connection currentConnection(){
Connection conn = connection.get();
if(conn == null){
conn = createConnection();
connections.set(conn);
}
return conn;
}
}
在这里定义了一个ThreadLocal对象来做数据库连接缓冲池, private final ThreadLocal<connection> connections = new ThreadLocal<Connection>();
如果当前线程没有绑定Connection对象,则connections.get()返回null,这时候就重新创建一个Connection对象,并绑定到当前的线程中,connection.set(conn)如果没有启动垃圾回收时候,每次请求总是获取这个数据连接对象。
虽然每个http请求缓存Connection对象时候,并不是每次都创建一个数据库连接对象,我们往往是从另外的数据库连接池获取到缓存的Connection对象。
分享到:
相关推荐
**线程局部变量(ThreadLocal)是Java编程中一个非常重要的工具类,它在多线程环境下提供了线程安全的数据存储。ThreadLocal并不是一个变量,而是一个类,它为每个线程都创建了一个独立的变量副本,使得每个线程都...
在 `LeakingServlet` 的 `doGet` 方法中,如果 `ThreadLocal` 没有设置值,那么会创建一个新的 `MyCounter` 并设置到 `ThreadLocal` 中。关键在于,一旦 `MyCounter` 被设置到 `ThreadLocal`,那么它将与当前线程...
Java事务和ThreadLocal是两种在Java编程中至关重要的概念,它们分别用于处理多线程环境下的数据一致性问题和提供线程局部变量。 首先,我们来深入理解Java事务。在数据库操作中,事务是一系列操作的集合,这些操作...
### 正确理解ThreadLocal:深入解析其工作原理与应用场景 #### 一、ThreadLocal的基本概念 `ThreadLocal`是Java平台提供的一种线程局部变量的解决方案,它为每一个使用该变量的线程都提供了独立的变量副本,使得每...