jdbc与线程安全

线程ThreadLocal  每一个线程对象创建好以后,JVM会为其分配一块内存空间用来存放当前线程对象独占的数据,(一个线程对象和另一个独占的数据(对象)绑定(如:(tl , conn)代表某一线程的独占数据 ))空间以map形式存放独占数据,相当于Map集合里的健对象和值对象

  每个线程的独占数据不共享,即:健对象(tl)和值对象(connection)不共享:Map<ThreadLocal,Object>

 

注意:ThreadLocal无法直接获取Map对象,操作Map只能通过ThreadLocalsetget方法

private static final ThreadLocal<Connection> tl

=new ThreadLocal<Connection>();

public static Connection  getConnection() throws Exception{

  Connection conn=tl.get();//get获取当前线程的连接对象

       if(conn==null){

       Class.forName(info.getProperty("driver"));

         conn=DriverManager.getConnection(info.getProperty("url"),                     info.getProperty("username"),info.getProperty("password"));

       tl.set(conn);//set把连接对象放在当前线程中

       }       return conn;  }

 

线程ThreadLocal的大致实现过程

     public class ThreadLocal<T>{

         public T get(){

            Map m=Thread.currentThread().getMap(); 

            return m.get(this);

                       }

         public void set(T t){

            Map m=Thread.currentThread().getMap();

            m.put(this,t);

                      }

            }

    

     ThreadLocal<Integer> ta=new ThreadLocal<Integer>()   //例子

     ta.set(new Integer(3)); 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值