ThreadLocal
当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。
原理
在ThreadLocal类中有一个Map,用于存储每一个线程的变量副本,Map中元素的键为线程对象,而值对应线程的变量副本
方法说明
方法 | 说明 |
---|---|
void set(Object value) | 设置当前线程的线程局部变量的值 |
public Object get() | 返回当前线程所对应的线程局部变量 |
public void remove() | 将当前线程局部变量的值删除 |
protected Object initialValue() | 返回该线程局部变量的初始值 |
示例
public class ConnectionManager {
private static ThreadLocal<Connection> CURRENT_CONNECTION = new ThreadLocal<Connection>() {
@Override
protected Connection initialValue() {
Connection conn = null;
String url="jdbc:mysql://localhost:3306/test";
String username="username";
String password="password";
try {
conn = DriverManager.getConnection(url,username,password);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
};
public static Connection getConnection() {
return CURRENT_CONNECTION.get();
}
public static void setConnection(Connection conn) {
CURRENT_CONNECTION.set(conn);
}
}