为什么用ThreadLocalMap而不使用Session
数据隔离与线程安全
ThreadLocalMap:它为每个线程提供独立的存储空间,确保不同线程间的数据相互隔离,避免了多线程环境下的并发访问问题,无需额外的同步操作就能保证线程安全。比如在处理多个用户的并发请求时,每个线程可以在自己的 ThreadLocalMap 中安全地存储和访问用户相关信息,不会出现数据混乱。
Session:通常用于在 Web 应用中跨页面或跨请求跟踪用户会话信息。它是基于客户端的会话标识(如 Session ID)来存储和获取数据的,在多线程环境下,如果多个线程同时访问和修改同一个 Session 对象,可能会引发数据不一致的问题,需要通过同步机制来保证线程安全,这增加了编程的复杂性。
作用域和生命周期
ThreadLocalMap:其生命周期与线程绑定,当线程执行完毕,ThreadLocalMap 及其存储的内容会随着线程的结束而被销毁,自动释放资源。它适用于在单个线程内传递和使用数据,比如在一次请求处理的过程中,从登录验证到后续的业务逻辑处理,在不同的方法和类之间传递用户信息,ThreadLocalMap 能很好地满足这种需求。
Session:的生命周期通常与用户的会话相关,从用户登录到注销或会话超时为止。它在整个会话期间都存在,即使在一段时间内没有任何请求,Session 也会占用服务器内存资源。如果并发用户数量较多,可能会导致服务器内存占用过高。而且,如果在一个请求处理过程中开启了多个线程,Session 在不同线程之间共享,可能会出现数据不一致的情况,因为 Session 并不保证在多线程环境下的原子性和线程安全。
性能和资源消耗
ThreadLocalMap:由于数据存储在当前线程的本地内存中,访问速度快,不存在网络传输或跨进程通信的开销。在处理大量并发请求时,能有效减少内存占用和提高系统性能。
Session:数据通常存储在服务器端的内存或数据库中,每次访问 Session 都需要进行一定的查找和读取操作,可能涉及到数据库查询或内存查找,这会带来一定的性能开销。特别是在高并发场景下,对 Session 的频繁访问可能会成为系统性能的瓶颈。
适用场景
ThreadLocalMap:适用于在单个线程内进行数据传递和共享的场景,如在 Web 应用中,从过滤器到 Servlet,再到业务逻辑层之间传递用户登录信息、请求上下文等。它能保证数据在同一线程内的一致性和独立性。
Session:适用于在多个页面或请求之间共享用户相关的状态信息,如用户购物车信息、登录状态等。但对于在多线程环境下需要严格保证数据隔离和线程安全的场景,Session 并不是最佳选择。
为什么用ThreadLocalMap而不使用Session的更多相关文章
- 关于session和token
最近做的项目是全平台的,需要给移动端做后台,有了许多改变,如是使用token而不是session.一开始我无法理解为什么不用session,看了很多文章以后才有一定了解. 例如在ios端, ...
- 解决vista和win7在windows服务中交互桌面权限问题:穿透Session 0 隔离
在某国外大型汽车公司BI项目中,有一个子项目,需要通过大屏幕展示销售报表,程序需要自动启动和关闭.开发人员在开发过程中,发现在Win7的service中不能直接操作UI进程,调查过程中,发现如 ...
- [转]解决vista和win7在windows服务中交互桌面权限问题:穿透Session 0 隔离
服务(Service)对于大家来说一定不会陌生,它是Windows 操作系统重要的组成部分.我们可以把服务想像成一种特殊的应用程序,它随系统的“开启-关闭”而“开始-停止”其工作内容,在这期间无需任何 ...
- Session invalidate
会清空所有已定义的session 而不是清空全部session的值也就是说 定义了一个名为 user 的session 调用invalidate()方法后使用Session.getValue(“use ...
- session与缓存
分布式系统开发常见问题-1. session的复制与共享 2. 分布式缓存的设计 1. session的复制与共享 在web应用中,为了应对大规模访问,必须实现应用的集群部署.要实现集群部署主要需要实 ...
- Tomcat的SessionID引起的Session Fixation和Session Hijacking问题
上一篇说到<Spring MVC防御CSRF.XSS和SQL注入攻击>,今天说说SessionID带来的漏洞攻击问题.首先,什么是Session Fixation攻击和Session Hi ...
- Consul Session
consul馆提供session机制,可用于构建分布式锁. session作为节点,健康检查和key/value数据之间的绑定层. 它们旨在提供粒度锁定,并受到“The Chubby Lock Ser ...
- 穿透Session 0 隔离(二)
上一篇我们已经对Session 0 隔离有了进一步认识,如果在开发过程中确实需要服务与桌面用户进行交互,可以通过远程桌面服务的API 绕过Session 0 的隔离完成交互操作. 对于简单的交互,服务 ...
- (七)Session 对象知识点总结(来自那些年的笔记)
如果你想要转载话,可不可以不要删掉下面的 作者信息 呀!: 作者:淮左白衣 写于 来源笔者自己之前学javaWeb的时候,写的笔记 : 目录 Session对象 Session和cookie的主要区别 ...
- SQL Server的Execute As与连接池结合使用的测试
简介 在SQL Server中,Execute As关键字允许当前账户在特定上下文中以另一个用户或登录名的身份执行SQL语句,比如用户张三有权限访问订单表,用户李四并没有权限访问订单表,那么给 ...
随机推荐
- Synchronized是怎么实现的?
回答重点 synchronized 实现原理依赖于JVM 的 Monitor(监视器锁)和对象头(Object Header) synchronized 修饰代码块:会在代码块的前后插入 monito ...
- [CRCI2008-2009] CVJETICI
[CRCI2008-2009] CVJETICI 观察图片及样例一: 注:下文中的被占领,指的是在这一个区间内,才有交叉开花的可能. 第一张小图发现 $2 \sim 3$ 被占领. 第二张小图发现 $ ...
- 大数据存储计算平台EasyMR:多集群统一管理助力企业高效运维
随着全球企业进入数字化转型的快车道,数据已成为企业运营.决策和增长的核心驱动力.为了处理海量数据,同时应对数据处理的复杂性和确保系统的高可用性,企业往往选择部署多个Hadoop集群,这样的策略可以将生 ...
- 我的第一个 WinUI 3 程序,遇到了 5 次碰壁
为什么要学习 WinUI 3呢? Winform 程序,简单.直接.快速: Wpf 程序,丰富.多样.好看: WinUI3 呢?据说它是前两者的升级版,比它们更酷炫,性能更好,而且跨平台,是技术的前沿 ...
- 3-7softmax回归的简洁实现
3-7softmax回归的简洁实现 import torch from torch import nn from d2l import torch as d2l batch_size = 256 tr ...
- 【8*】CDQ分治学习笔记
前言 一直感觉 CDQ 分治是一个很高级的算法,但其实 CDQ 分治的思想早就接触过了.其实,也不是很困难嘛. 此类知识点大纲中并未涉及,所以[8]是我自己的估计,后带星号表示估计,仅供参考. CDQ ...
- ABC396(VP)
本来明天有活动,晚上 VP 了一场 abc 找找手感,结果活动取消了(. 额,算了一下,大概是 rk.730 左右,打了就是上分局. A - Triple Four 按照题目模拟即可. 点击查看代码 ...
- 利用PS调整图片光线明暗不均的情况
根据光源角度,利用快速蒙版和渐变工具选择暗区,借用曲线工具调整亮度,达到整体平衡 快速蒙版 渐变工具 使用黑白渐变从光线暗部拉到光线亮部,使图片蒙上一层渐变的红色 反选 取消快速蒙版,此时图片上会出现 ...
- STM32 IAP(OTA)
一.背景知识 STM32启动流程(从内部flash启动)[1] 正常情况下,程序从Flash启动时的流程如下:(转载自) https://blog.csdn.net/qq_42190402/artic ...
- 国际认可!天翼云“云顶”AI赋能营销服务应用案例成功入选联合国AI for Good创新扩大影响案例集!
7月8日至11日,由联合国国际电信联盟(ITU)与联合国工业发展组织.联合国教科文组织等40余家联合国机构共同举办的2025人工智能向善全球峰会在瑞士日内瓦召开.峰会期间,ITU正式发布"人 ...