如果我有一个共享对象,则该对象被保存在httpsession中。
如果我不时地修改它而不进行任何并发的更改(例如,我的客户信息是在会话中保存的,并且一次只能对同一个用户(此信息的所有者)访问),那么是否有可能出现与多线程等相关的问题?
流示例:将对象保存在会话中(线程1)。对象由线程修改,即服务于request1(用户更改了数据并将其保存在会话中)。对象由线程修改,即服务于request2 (用户使用他的用户信息打开页面)。
request2呈现的页面上的数据是否有可能过时(没有ajax或其他异步操作)?
UPD:我的问题是,它似乎是对共享资源的顺序访问,在httpsession中进行(绑定到具体的登录用户)。这是主要原因,我不想使用易失性的东西或同步。
发布于 2012-08-15 15:48:23
当然,只要多个线程能够访问相同的数据,就有可能出现问题。
用户可以打开多个选项卡/窗口,并进行近乎同步的请求。这些请求将在不确定的时间和顺序内处理。
发布于 2012-08-15 16:00:12
你还没有给出足够的相关信息来精确地回答你的问题,但让我给你一些一般性的警告。
happens-before关系的情况下,JVM不需要将从本地缓存/线程本地存储到主内存的任何更改传播到主内存,反之亦然:读取线程不需要从主内存中提取新的数据。happens-before关系)。总之,您肯定需要一些方法来确保从写入到读取之间的happens-before关系。这完全取决于你的代码的细节。
https://stackoverflow.com/questions/11972475
复制相似问题