572
技术社区[云栖]
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的实现原理,请参看https://blog.csdn.net/woshixuye/article/details/10017871
最后更新:2017-04-03 07:57:12
上一篇:
mac os x下的一些小技巧
下一篇:
【AllJoyn框架-01】连接PC与Arduino Due开发板
《仿人机器人原理与实战》一1.2 反射弧与仿人机器人设计
gitlab配置ssh密钥及简单使用
从Google I/O 2012看 Android 4.1的变化
JavaScript中访问节点对象的方法有哪些?
苹果8被人锁定了该怎么办?iphone7id被锁了怎么才能解锁
第14届(2017)全国大学生信息安全与对抗技术竞赛圆满落幕
iphone开发笔记——Cocos2d CCLayer中的touch
为什么要把jsp放在WEB-INF目录下
linux下串口编程设置函数---------set_opt(fd1,115200,8,'N'1)--------------------
JS中数组去除重复