码迷,mamicode.com
首页 > 编程语言 > 详细

Java中线程封闭之ThreadLocal

时间:2014-06-22 10:04:11      阅读:403      评论:0      收藏:0      [点我收藏+]

标签: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,布布扣,bubuko.com

Java中线程封闭之ThreadLocal

标签:java   threadlocal   

原文地址:http://woshixy.blog.51cto.com/5637578/1429379

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!