关于@Controller中的方法是多线程并发的问题,感觉不是很理解

soap303 2016-11-16 03:50:04

@Controller
public class ItemController {

@Autowired
private ItemService itemService;

@RequestMapping("/item/list")
@ResponseBody
public EUDataGridResult getItemList(Integer page, Integer rows) {
EUDataGridResult result = itemService.getItemList(page, rows);
return result;
}

如图中所示,如果多个客户端分页请求,@Controller默认是单例,那么处理的时候 都是使用同一个ItemController和同一个方法getItemList(Integer page,Integer rows)多个客户端分页请求参数可能都不一样

<!-- 通知 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- 传播行为 -->
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="create*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="find*" propagation="SUPPORTS" read-only="true" />
<tx:method name="select*" propagation="SUPPORTS" read-only="true" />
<tx:method name="get*" propagation="SUPPORTS" read-only="true" />
</tx:attributes>
</tx:advice>

关于事务的配置中,get* 是传播是supports 支持事务,如果没有事务,那就非事务形式,只读。
那么如果,多个客户端多个客户端分页请求参数可能都不一样,都是同一个方法,
EUDataGridResult result = itemService.getItemList(page, rows); 如果有两个客户端请求,分别是不同的页码和行数,那么如果第一个已经有结果了,result已经有数据了,这个时候第二个请求也查询出数据,那这时候result不就再次被覆盖数据了吗?
没有发现处理并发的啊。。。
...全文
2932 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
soap303 2016-11-17
  • 打赏
  • 举报
回复
没人解决了么? 哎。我就是困惑,如果两个线程同时访问了那个方法,如果确保返回的是对应的结果呢。。。
soap303 2016-11-17
  • 打赏
  • 举报
回复
引用 2 楼 qq_21525397 的回复:
我想大概是你对线程安全的理解存在问题,线程安全出问题只是因为线程间有共享属性(就是类的属性),而spring Controller是方法级的处理,不存在共享属性,所以不会有线程安全问题。
嗯嗯,对的,我之前考虑的时候不知道怎么搞的了都。。完全没有之前的印象了都。。哎。。谢谢了!
nikyotensai 2016-11-17
  • 打赏
  • 举报
回复
引用 2 楼 qq_21525397 的回复:
我想大概是你对线程安全的理解存在问题,线程安全出问题只是因为线程间有共享属性(就是类的属性),而spring Controller是方法级的处理,不存在共享属性,所以不会有线程安全问题。
小生--幻 2016-11-17
  • 打赏
  • 举报
回复
我想大概是你对线程安全的理解存在问题,线程安全出问题只是因为线程间有共享属性(就是类的属性),而spring Controller是方法级的处理,不存在共享属性,所以不会有线程安全问题。

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧