本文作者:黄海燕,叩丁狼高级讲师。原创文章,转载请注明出处。
ThreadLocal是一个本地线程副本变量工具类,可以理解为线程的本地变量。主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,实现了线程的数据隔离,是线程独有的所以本身就是线程安全,特别适用于各个线程依赖多个不同的变量值完成操作的场景。如:数据库连接、Session管理等。
##1.1 ThreadLocal简单使用
###1.1.1 ThreadLocal常用方法:
###1.1.2 需求:简易数据库连接池
因为数据库连接Connection的创建和消耗非常浪费资源,所以我们就选择了数据库连接池,以空间换时间,事前创建一定数量的数据库连接,存放到一个池子中,有需要的时候拿来用,用完放回放回到池子中。并且在多线程中很可能一个线程在使用Connection进行数据库操作,而另外一个线程调用同一个Connection的close方法关闭链接。
public class DBUtil {
//数据库连接池
private static DataSource source;
//为了保证同一个线程使用的连接操作和释放都是同一个Connection,需要使用ThreadLocal
private static ThreadLocal<Connection> local = new ThreadLocal<Connection>();
private static LinkedList<Connection> pool = new LinkedList<Connection>();
pr