ThreadLocal类与使用方法介绍

ThreadLocal类与使用方法介绍

Thread Local类在多线程并行中有较为广泛的应用,可以有效进行线程之间的变量隔离,保障线程的安全性,避免发生内存泄漏。
该类支持泛型,可以保存各种类型对象所产生的线程信息。
ThreadLocal类型常用的三种方法:set(T object),get(),remove()。

set(T Object)方法

该方法是在ThreadLocal对象中加入一个T类型的线程对象,并以Maps的形式保存在ThreadLocal对象中。

get()方法

该方法是获取Thread Local对象中保存的线程副本。并将其赋值给T类型变量。

remove()方法

该方法是销毁在ThreadLocal对象中保存的所有线程。

下面我们以一个常见的数据库链接为例,说明一下他的使用方法。

private static ThreadLocal<Connection> tl=new ThreadLocal();
public static Connection getCon(){
Connection cn=tl.get();
if(cn==null){
try{
Class.forName("com.mysql.cj.jdbc.Driver");
Connection cn=DriverManager(url,user,pwd);
tl.set(cn);
}
catch(Exception e){
}
cn=tl.get();
return cn;
}

}

上述静态方法的作用:从私有ThreadLocal对象中获取一个数据库链接的副本。

使用ThreadLocal获取数据库链接副本的方式进行数据库操作的好处:

1、避免重复new一个数据库链接对象,减少了资源开销。
2、如果使用单一链接进行多个事务的数据库操作,那么很有可能导致事务之间相互等待,以及数据不一致的情况,为每个事务均创建数据库链接副本,在有效利用多线程的同时,也能对多个线程的内容进行封闭,避免了事务对同一数据进行不同操作,导致数据不一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值