SpringBean默认是单例的,高并发情况下,如何保证
并发安全?
首 先 来 举 个 例 子 , 证 明 单 例 的 并 发 不 安 全 性 :
@Controller
public class HomeController {
private int i;
@GetMapping("testsingleton1")
@ResponseBody
public int test1() {
return ++i;
}
}
多 次 访 问 此 u r l , 可 以 看 到 每 次 的 结 果 都 是 自 增 的 , 所 以 这 样 的 代 码
显 然 是 并 发 不 安 全 的 。
二、解决方案
因 此 , 我 们 为 了 让 无 状 态 的 海 量 H t t p 请 求 之 间 不 受 影 响 , 我 们 可 以
采 取 以 下 几 种 措 施 :
2.1 单例变原型
对 w e b 项 目 , 可 以 C o n t r o l l e r 类 上 加 注 解 @ S c o p e ( " p r o t o t y p e "
) 或 @ S c o p e ( " r e q u e s t " ) , 对 非 w e b 项 目 , 在 C o m p o n e n t 类 上
添 加 注 解 @ S c o p e ( " p r o t o t y p e " ) 。
优 点 : 实 现 简 单 ;
缺 点 : 很 大 程 度 上 增 大 了 b e a n 创 建 实 例 化 销 毁 的 服 务 器 资 源 开 销 。