JAVA-EE手写ThreadLocal源码实现一个线程一个连接对象------Java-Web项目
  0AYXapvh7mJh 2023年11月02日 34 0

手写ThreadLocal

package com.bjpowernode.ThreadLocal;

import java.util.HashMap;
import java.util.Map;

public class MyThreadLocal<T>
{
    private Map<Thread,T> map = new HashMap<>();
    public void set(T o)
    {
        //向threadLocal中绑定
        //因为我们一个线程运行的时候,必定在一个栈里面,一定是当前线程
        //所以直接存就可以了
        map.put(Thread.currentThread(),o);
    }
    public T get()
    {
        //从threadLocal中获取
        return map.get(Thread.currentThread());
    }
    public void remove()
    {
        //从threadLocal中删除
        map.remove(Thread.currentThread());
    }
}

ThreadLocal改造工具类

package com.bjpowernode.ThreadLocal;

import java.sql.SQLException;
import java.util.ResourceBundle;

public class DBUtil
{
    private static MyThreadLocal<Connection> local = new MyThreadLocal();
    private static ResourceBundle resourceBundle = ResourceBundle.getBundle("resources.jdbc");
    private static String url = resourceBundle.getString("url");
    private static String username = resourceBundle.getString("user");
    private static String password = resourceBundle.getString("password");
    private static String driver = resourceBundle.getString("driver");
    static
    {
        try {
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
    public static Connection getConnection() throws SQLException
    {
        Connection connection = local.get();
        if(connection == null)
        {
            //第一次调用一定是空的
            connection = new Connection();
            //绑定
            local.set(connection);
        }
        return connection;
    }
}

Dao层

package com.bjpowernode.ThreadLocal;

import java.sql.SQLException;

public class UserDao
{
    public void Insert()
    {
//        Thread thread = Thread.currentThread();
//        System.out.println(thread);
        try {
            Connection connection = DBUtil.getConnection();
            System.out.println(connection);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
        System.out.println("UserDao添加");
    }
}

Service层

package com.bjpowernode.ThreadLocal;

import java.sql.SQLException;

public class UserService
{
    private UserDao userDao = new UserDao();
    public void Save()
    {
//        Thread thread = Thread.currentThread();
//        System.out.println(thread);
        try {
            Connection connection = DBUtil.getConnection();
            System.out.println(connection);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
        userDao.Insert();
        System.out.println("UserService保存");
    }
}

Conn对象

package com.bjpowernode.ThreadLocal;

public class Connection
{

}

测试类

package com.bjpowernode.ThreadLocal;

public class Test
{
    public static void main(String[] args)
    {
        //创建获取Conn对象
//        Thread thread = Thread.currentThread();
//        System.out.println(thread);
//        Connection connection = new Connection();
        UserService userService = new UserService();
        userService.Save();
    }
}
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  2Vtxr3XfwhHq   2024年05月17日   51   0   0 Java
  Tnh5bgG19sRf   2024年05月20日   104   0   0 Java
  8s1LUHPryisj   2024年05月17日   46   0   0 Java
  aRSRdgycpgWt   2024年05月17日   47   0   0 Java
0AYXapvh7mJh