java用 ThreadLocal 实现用户会话隔离

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


public class UserSessionHolder {

    private static final ThreadLocal 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) {

www.808455.com 电话13388885782 www.211178.com 电话13388885782 www.922238.com 电话13388885782 www.729279.com 电话13388885782 www.955526.com 电话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 www.hjlh666.com 电话13388885782 www.hjlh888.com 电话13388885782 www.hj666.uk 电话13388885782 www.hj777.uk 电话13388885782 www.hj888666.com 电话13388885782 www.hj332025.com 电话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防止内存泄漏。

请使用浏览器的分享功能分享到微信等