ThreadLocal

简介: ThreadLocal

ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的。


为什么要学习ThreadLocal?


管理Connection


     最典型的是管理数据库的Connection:当时在学JDBC的时候,为了方便操作写了一个简单数据库连接池,需要数据库连接池的理由也很简单,频繁创建和关闭Connection是一件非常耗费资源的操作,因此需要创建数据库连接池~那么,数据库连接池的连接怎么管理呢??我们交由ThreadLocal来进行管理。为什么交给它来管理呢??

   ThreadLocal能够实现当前线程的操作都是用同一个Connection,保证了事务!


package com.utils;
import javax.sql.DataSource;
import java.sql.Connection;
/**
 * 连接的工具类,它用于从数据源中获取一个连接,并且实现和线程的绑定
 */
public class ConnectionUtils {
    //创建一个线程
    private ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
    private DataSource dataSource;
    public void setDataSource(DataSource dataSource) {
        this.dataSource = dataSource;
    }
    /**
     * 获取当前线程上的连接
     * @return
     */
    public Connection getThreadConnection() {
        try{
            //1.先从ThreadLocal上获取
            Connection conn = tl.get();
            //2.判断当前线程上是否有连接
            if (conn == null) {
                //3.从数据源中获取一个连接,并且存入ThreadLocal中
                conn = dataSource.getConnection();
                tl.set(conn);
            }
            //4.返回当前线程上的连接
            return conn;
        }catch (Exception e){
            throw new RuntimeException(e);
        }
    }
    /**
     * 把连接和线程解绑
     */
    public void removeConnection(){
        tl.remove();
    }
}

这样就实现了线程的绑定,减少了connection的频繁创建

相关文章
|
12月前
|
存储 安全 Java
【ThreadLocal】
【ThreadLocal】
|
3月前
|
存储 Java
ThreadLocal应用及理解
ThreadLocal应用及理解
37 10
|
4月前
|
Java
ThreadLocal 场景题
ThreadLocal 场景题
25 1
|
5月前
|
存储 Java
ThreadLocal 有什么用
ThreadLocal 有什么用
46 0
|
存储 算法 安全
深入详解ThreadLocal
在我们日常的并发编程中,有一种神奇的机制在静悄悄地为我们解决着各种看似棘手的问题,它就是 ThreadLocal 。
21488 9
深入详解ThreadLocal
|
存储 安全 Java
ThreadLocal介绍和应用
ThreadLocal介绍和应用
48 0
|
缓存 安全 Java
浅谈ThreadLocal
浅谈ThreadLocal
140 0
|
存储 Java
|
存储 SQL Java
ThreadLocal的其他应用
request对象跟PageHelper
96 0
|
存储 Java 数据库连接
对ThreadLocal的一点了解
ThreadLocal是线程变量,它为每个线程提供单独的存储空间。其主要作用是做线程间的数据隔离,也可以用于在同一个线程间方便地进行数据共享。(对于多线程资源共享,加锁机制采用“时间换空间”,ThreadLocal采用“空间换时间”)
123 0