快速掌握ThreadLocal
发布日期:2021-06-30 18:41:01 浏览次数:6 分类:技术文章

本文共 1628 字,大约阅读时间需要 5 分钟。

一、模拟ThreadLocal的设计。

public class ThreadLocal{    private Map
container = 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 ThreadLocal
tl = 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Filter过滤器快速入门
下一篇:Apache之DBUtils的使用

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月14日 21时57分48秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章