1. ThreadLocal的解释,参见
http://my.oschina.net/u/1989867/blog/528047
2. ThreadLocal的简单应用:利用ThreadLocal隔离局部变量的特色实现为每一个线程提供本身的数据库连接
ConnectionResource.java ------------------------------------------产生数据库连接的资源类
package com.lxh.ThreadLocal;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
// 资源类
public class ConnectionResource {
// 属性
public static String userName = "root";
public static String userPass = "admin123";
public static String url = "jdbc:mysql://localhost:3306/user";
public static String driverName = "com.mysql.jdbc.Driver";
// 获取数据库连接
public Connection getConnection(){
Connection conn = null;
try {
Class.forName(driverName);
conn = DriverManager.getConnection(url, userName, userPass);
} catch (SQLException e) {
System.out.println("获取数据库连接失败..."+e.getMessage());
} catch (ClassNotFoundException e) {
System.out.println("获取数据库加载类失败..."+e.getMessage());
e.printStackTrace();
}
return conn;
}
}
ConnectionThread.java ------------------------------------------模拟多个线程实现屡次获取数据库连接
package com.lxh.ThreadLocal;
import java.sql.Connection;
//
public class ConnectionThread implements Runnable {
//
public ThreadLocal<Connection> tl = new ThreadLocal<Connection>() {
@Override
protected Connection initialValue() {
ConnectionResource cr = new ConnectionResource();
return cr.getConnection();
}
};
@Override
public void run() {
// 连接对象
Connection conn = null;
// 循环获取线程的连接对象
for (int i = 0; i < 5; i++) {
conn = tl.get();
System.out.println("***当前线程【" + Thread.currentThread().getName()
+ "】获取的连接资源:" + conn + "***");
}
}
}
Test.java ------------------------------------------测试类
package com.lxh.ThreadLocal;
/**
* 使用ThreadLocal解决多线程问题
*/
public class Test {
public static void main(String[] args) {
ConnectionThread ct = new ConnectionThread();
Thread t0 = new Thread(ct);
Thread t1 = new Thread(ct);
Thread t2 = new Thread(ct);
Thread t3 = new Thread(ct);
t0.start();
t1.start();
t2.start();
t3.start();
}
}
3. 测试结果

4. 测试结果分析 咱们经过"测试结果"能够清晰地看到,同一个线程,不管请求多少次,其获取到的数据库连接都是同样的,这符合咱们的预期----不让同一个线程获取多个数据库连接以减小资源消耗。