夏橙M兮 发表于 2020-7-27 16:47

java多线程求解惑

最近在看多线程的方面的知识,有点疑惑,如果1000个人同时进行登录算不算是多线程,登录的逻辑需不需考虑多线程安全?我看到登录方法里用的都是hashmap,毕竟hashmap不是线程安全的,应该用currenthashmap。
这个我认为应该不算多线程,但是我也不太清楚。百度了半天没看懂,大佬指点一波。

Vvvvvoid 发表于 2020-7-27 17:03

hashmap 如果是 类变量 就会有并发问题,
Servlet 或者 Controller 一般都是 单例,该变量共享

如果是方法内的临时变量就不会有问题,
方法内变量走的堆栈, 这个堆栈是线程级别的可用区

夏橙M兮 发表于 2020-7-27 17:04

tyh123y 发表于 2020-7-27 17:01
登录和这个有啥关系,线程是操作系统上的概念,是cpu调度的最小单位

多个人登录不是同时运行同一个方法?

kai.wu 发表于 2020-7-27 17:07

1000人同时登录,如果只有一个线程处理者一千个请求,就不是多线程。这里看的是多少个线程处理,而不是多少个人同时操作。
如果是多线程环境下,必须是要考虑线程安全问题的。
HashMap是线程不安全的,但是如果方法已经加锁了或者其他的一些方式避免了多线程同时操作这个HashMap   那么这个HashMap也是安全的,因为同一时间,只有一个线程在操作。
这是我的理解你可以参考一下   多线程方面我接触的也不是很多如果有什么不对的地方希望大家指正

1163194557 发表于 2020-7-27 17:08

登入需要考虑多线程?没处理过

wama 发表于 2020-7-27 17:12

controller上同时接收多个请求的这种叫并发数。Springboot 能支持的最大并发量主要看其对Tomcat的设置。而并发量指的是连接数,HTTP请求不会太耗时,而且多个连接一般不会同时来消息,所以一个线程处理多个连接没有太大问题。瓶颈估计在查库(验证账号密码上),可以从这方面去考虑如何突破瓶颈

wangyu2019 发表于 2020-7-27 17:14

多线程操作你要考虑的是对于同一条数据是否会有影响,登录肯定是每个用户登录自己的数据,不会对同一条数据产生修改或者更新,所以个人认为应该不属于多线程范畴

瞄帕斯 发表于 2020-7-27 17:15

因为你的使用一般都是单例的 (controller)

虽然是同一个方法但是你的变量是共享的 不会存在该问题

如果想简单不考虑其他的话 加个同步锁 synchronized 也能避免一些线程问题

爱好jyh 发表于 2020-7-27 17:32

多线程和线程安全的关系,多线程的情况下,没有共享变量的话线程安不安全一般没影响的。就比如多线程只是去查询数据库的用户名和密码,,这种情况就不需要考虑线程是否安全了;

田三水 发表于 2020-7-27 17:41

这是属于高并发里面的内容乐吧!!!可以参考一下火车票!!!
页: [1] 2
查看完整版本: java多线程求解惑