Java中线程封闭之ThreadLocal

在访问共享数据时通常使用同步。若不使用同步则可以将对象封闭在一个线程中达到线程安全的目的,该方法称为线程封闭(Thread Confinement)。其中实现线程封闭中规范的方法是使用ThreadLocal类。线程封闭技术一种常用的使用场景是在JDBC Connection对象。

public class ConnectionHelper
{
private final static String URL = "";
private final static ThreadLocal<Connection> connectionHolder = new ThreadLocal<Connection>()
{
public Connection initialValue()
{
try
{
return DriverManager.getConnection(URL);
}
catch (SQLException e)
{
throw new RuntimeException("数据库连接有误");
}
}
};

public static Connection getConnection()
{
return connectionHolder.get();
}

}

当初次调用ThreadLocal的get方法时就会调用intialValue来获取初始值,可以理解为Thread<T>包含了Map<Thead,T>对象,但实际实现并不是如此。这些特定于线程的只保存在Thread对象中,当线程终止后会被当做垃圾回收。我曾写过《Java线程范围变量——ThreadLocal的模拟和解释》来模拟ThreadLocal的实现原理,请参看http://blog.csdn.net/woshixuye/article/details/10017871


本文出自 “IT徐胖子的专栏” 博客,请务必保留此出处http://woshixy.blog.51cto.com/5637578/1429379

Java中线程封闭之ThreadLocal,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。