快速掌握ThreadLocal
发布日期:2021-06-30 18:41:01
浏览次数:6
分类:技术文章
本文共 1628 字,大约阅读时间需要 5 分钟。
一、模拟ThreadLocal的设计。
public class ThreadLocal{ private Mapcontainer = new HashMap (); public void set(Object value){ container.put(Thread.currentThread(),value);//用当前线程作为key } public Object get(){ return container.get(Thread.currentThread()); } public void remove(){ container.remove(Thread.currentThread()); }}
总结:调用该类的get方法,永远返回当前线程放入的数据。线程局部变量。
二、代码实战
/** * @author CSDN_LQR * @TODO ThreadLocal中保存的数据只能在当前线程中获取,其它线程访问不到 */public class ThreadLocalDemo { public static void main(String[] args) { final ThreadLocaltl = new ThreadLocal (); tl.set("我只能在当前线程中被获取"); new Thread(new Runnable() { @Override public void run() { String str = tl.get(); System.out.println("另一个线程中:" + str); } }).start(); // tl.remove();//移除后将获取不到ThreadLocal中的数据 String str = tl.get(); System.out.println("当前线程中:" + str); }}
三、使用ThreadLocal解决代码分层问题
javaee开发常见的模式有MVC模式,在C层中常常会再次分层,如:servlet(web层)、service(业务逻辑层)、dao(数据访问层),其中service和dao最容易混在一起,如转钱交易场景,service层需要执行“事务”操作,会用到数据库连接对象(Connection),这就与dao层混在一起了,因为Connection是dao层才会用到对象,但如果把“事务”放到dao层,也是将service层与dao混在一起,因为转钱交易这个 事务应该由service层来做。所以,使用ThreadLocal可以解决这样的分层问题。
工程实例:
工程中使用到的数据库表:CREATE DATABASE day14;USE day14;create table account( id int primary key auto_increment, name varcar(50), money float);insert into account(name,money) values('aaa',1000);insert into account(name,money) values('bbb',1000);insert into account(name,money) values('ccc',1000);SELECT * FROM account;
转载地址:https://linqiarui.blog.csdn.net/article/details/52890019 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年04月14日 21时57分48秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
[转] 用python编写控制网络设备的自动化脚本3:启动
2019-04-26
扩展Python控制台实现中文反馈信息
2019-04-26
扩展Python控制台实现中文反馈信息之二-正则替换
2019-04-26
在PyPI测试平台发布Python包
2019-04-26
中文代码示例之Electron桌面应用开发初体验
2019-04-26
中文代码示例之NW.js桌面应用开发初体验
2019-04-26
为《 两周自制脚本语言 》添加中文测试代码
2019-04-26
将《 两周自制脚本语言 》测试中使用的接口中文化
2019-04-26
5分钟入门LingaScript-尝鲜中文版TypeScript
2019-04-26
重拾《 两周自制脚本语言 》- 支持中文标识符
2019-04-26
Java实现文本编辑时基于拼音输入的补全原型
2019-04-26
从立创EDA,Gratipay看中文编程开发环境和推广运营的一个趋势
2019-04-26
中文代码之Django官方入门:建立模型
2019-04-26
Python实现推流直播
2019-04-26
你不得不了解的卷积神经网络发展史
2019-04-26
你不得不了解的机器学习知识
2019-04-26
你不得不了解的深度学习知识(一)
2019-04-26