ITPub博客

首页 > 应用开发 > Java > java用 ThreadLocal 实现用户会话隔离

java用 ThreadLocal 实现用户会话隔离

原创 Java 作者:mingtian66 时间:2025-05-29 16:38:17 0 删除 编辑

以下是使用ThreadLocal实现用户会话隔离的完整示例,模拟Web应用中每个请求线程的用户会话隔离:


public class UserSessionHolder {

    private static final ThreadLocal<UserSession> sessionHolder = new ThreadLocal<>();

    

    public static void set(UserSession session) {

        sessionHolder.set(session);

    }

    

    public static UserSession get() {

        return sessionHolder.get();

    }

    

    public static void clear() {

        sessionHolder.remove();

    }

}

 class UserSession {

    private String userId;

    private String username;

    private long loginTime;

    

    // 构造方法、getter和setter

    public UserSession(String userId, String username) {

        this.userId = userId;

        this.username = username;

        this.loginTime = System.currentTimeMillis();

    }

    

    // 省略getter/setter方法...

}

 class RequestHandler implements Runnable {

    private final UserSession session;

    

    public RequestHandler(UserSession session) {

        this.session = session;

    }

    

    @Override

    public void run() {

        try {

            UserSessionHolder.set(session);

            System.out.println(Thread.currentThread().getName() 

                + " 处理用户: " + UserSessionHolder.get().getUsername());

            // 模拟业务处理

            Thread.sleep(500);

        } catch (InterruptedException e) {

            e.printStackTrace();

        } finally {

            UserSessionHolder.clear();

        }

    }

}

 class Application {

    public static void main(String[] args) {

电话13388885782 电话13388885782 电话13388885782 电话13388885782 电话13388885782 www.itl222.com 电话13388885782 www.itl5553.com 电话13388885782 www.itl567.com 电话13388885782 www.itl666.com 电话13388885782 www.itl996.com 电话13388885782 www.tl1001.com 电话13388885782 www.tl1002.com 电话13388885782 www.tl1003.com 电话13388885782 www.itl1001.com 电话13388885782 www.itl1003.com 电话13388885782 电话13388885782 电话13388885782 电话13388885782 电话13388885782 电话13388885782 电话13388885782

        // 模拟多个用户请求

        ExecutorService executor = Executors.newFixedThreadPool(3);

        for (int i = 1; i <= 5; i++) {

            UserSession session = new UserSession("UID" + i, "User" + i);

            executor.execute(new RequestHandler(session));

        }

        executor.shutdown();

    }

}

该实现通过ThreadLocal为每个线程创建独立的用户会话副本,确保多线程环境下会话数据隔离。UserSessionHolder作为会话容器,RequestHandler模拟Web请求处理流程,最后在主程序中测试多用户场景。注意在finally块中清理ThreadLocal防止内存泄漏。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70040412/viewspace-3086170/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2024-08-07

  • 博文量
    589
  • 访问量
    602729