关于静态List的高并发读写的线程安全问题
大家好,关于List<T>的线程安全论坛里讨论了很多,基本上都是针对怎么应用读写锁的操作发表的看法。我仔细思考了一下,有个特殊情况下的疑问想得到明确的答案,希望有大牛可以赐教。
假设在一个Web项目中有百万级别的用户,这些用户的登录账号和登录密码我们存储在一个静态的 List<UserInfo> 中,用来提供用户登录的快速响应。
那么,在高并发的情境下(假设用户频繁读取账号密码,修改密码)都会对该List作大量读写,但是这里每个用户读写的都是对应自己的那个UserInfo。按我的理解,List中保存的是该UserInfo的内存地址,只要我们不new一个新的UserInfo来替代当前对象,我们对这个UserInfo进行数据的修改都不影响List的本身结构,所以这样的读写是线程安全的。在这种情形下是不用对List进行读写锁定的。
我这样理解对吗???求赐教,最好有实例说明。
假设在一个Web项目中有百万级别的用户,这些用户的登录账号和登录密码我们存储在一个静态的 List<UserInfo> 中,用来提供用户登录的快速响应。
那么,在高并发的情境下(假设用户频繁读取账号密码,修改密码)都会对该List作大量读写,但是这里每个用户读写的都是对应自己的那个UserInfo。按我的理解,List中保存的是该UserInfo的内存地址,只要我们不new一个新的UserInfo来替代当前对象,我们对这个UserInfo进行数据的修改都不影响List的本身结构,所以这样的读写是线程安全的。在这种情形下是不用对List进行读写锁定的。
我这样理解对吗???求赐教,最好有实例说明。
...全文
相关推荐
Java 单例模式线程安全问题
线程安全问题通常是由全局变量及静态变量引起的。若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的。
MySQL 数据库如何解决高并发问题
在实际应用中,结合业务场景和硬件资源,可以灵活选用这些策略组合,例如,使用读写分离结合缓存和分库分表,以应对复杂的高并发挑战。同时,持续监控系统性能,进行调优,以应对不断变化的业务需求。
Activity之间传递List数据
使用静态成员变量或Singleton模式: 对于大量数据,可以考虑使用全局变量或Singleton模式在Activity之间共享。但这不是推荐的最佳实践,因为可能导致内存泄漏或数据同步问题。5.
g++中的局部静态变量的初始化机制及线程安全
例如,在上面的代码中,静态对象 `instance` 将在第一次调用 `GetInstance` 函数时初始化,而不是在程序启动时。然而,局部静态变量的初始化机制也存在一些问题。
详解SimpleDateFormat的线程安全问题与解决方案
这样,即使多个线程同时访问,也不会出现线程安全问题。


高性能WEB开发
