52IT

 找回密码
 立即注册
查看: 1077|回复: 2

使用Session和ThreadLocal有啥区别呢

[复制链接]

签到天数: 15 天

[LV.4]偶尔看看III

1192

主题

1396

帖子

6万

积分

小菜鸡

Rank: 9Rank: 9Rank: 9

积分
68312
金钱
66586
发表于 2022-10-16 14:58:29 | 显示全部楼层 |阅读模式
想问下在项目中保存用户登录信息的时候,在后面获取使用的时候,使用Session和ThreadLocal有啥区别呢,在网上搜索他俩之间的区别几乎没大有文章写。我现在是通过JWT生成的token中获取用户信息保存在threadLocal里面。我想了几点您看对吗或者您补充下内容1、Session会占用服务器资源,用户越多所占的内存就越多,ThreadLocal保存信息实际上是用的所发送请求那条线程内部类里面的 ThreadLocals 来保存,不会申请额外资源2、Session获取用户信息,先要拿到对应的Request请求,且获取用户相关信息还要传入相应的参数,比较不雅,Threadlocal声明为一个公共的静态变量,可以在任何地方获取到3、线程安全问题,Threadlocal 本身是线程安全的,一个请求对应一个线程对应一个Threadlocal,而Session本身会有线程安全的问题

签到天数: 15 天

[LV.4]偶尔看看III

1192

主题

1396

帖子

6万

积分

小菜鸡

Rank: 9Rank: 9Rank: 9

积分
68312
金钱
66586
 楼主| 发表于 2022-10-16 16:59:09 | 显示全部楼层
严格意义上这两个没有直接的关系,不具备对比性的关系,也不是替代的关系,session指的是服务器端的HttpSession,是处理当前会话业务相关的。 ThreadLocal通常可以存储了当前线程的上下文对象,可以跨边界通信,这样就不需要把一些对象或参数在整个调用链上传输,可以在调用第一层的时候,将某些对象存储下来(request,session,xxx等)封装为一个Context类,然后任何地方就可以调用这个类,获取之前那个参数,如果不用他,则需要把参数传递到第二层、第三层,第N层。 像以前那种基于session的会话的JSP项目或一些老项目,大部分都是在Filter中,将当前session或request对象放入到threadlocal上下文中,这样就不需要在每个类里面接收参数。而现在前后端分离后,会话机制升级为JWT,也是同理,为了方便在各个代码中调用,也会放到threadlocal中。
回复

使用道具 举报

签到天数: 27 天

[LV.4]偶尔看看III

1

主题

667

帖子

1509

积分

至尊VIP

积分
1509
金钱
842
 楼主| 发表于 2022-10-17 19:08:57 | 显示全部楼层
kkk
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋|52IT

GMT+8, 2024-5-16 12:40 , Processed in 0.051072 second(s), 23 queries .

Powered by www.52it.cc X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表