关于Jfinal Controller 多线程情况下,读取数据库共享变量问题!
@JFinal 你好,想跟你请教个问题:
我先描述下场景: 我们在使用jfinal开发一个项目有一个场景是这样的: 有一个预约功能,例如只能预约五个人,那么预约成功一次会在数据库添加一条预约记录, 在添加预约记录之前是通过 查看预约记录的总数来判断是否可以预约, 但是在多线程的情况下,就会出现多个用户同时满足预约条件同时预约,然后我的想法是:打算进行加锁让判断的预约条件的代码在多线程下,只能有一个线程执行,但是看了jfinal源代码 发现Jfinal的Controller是线程安全的,每一次都是new的新实例,代表每次都是不同对象,所以不能加锁, 最后的解决方案是将预约判断条件放在Validate中做了,解决了问题, 我想问下这类问题,是否在jfinal中是否有其他的解决方案(消息队列除外)。 多谢赐教
在Controller中 多线程中 如何保证一段代码 同一个时间点只能被一个线程执行?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
加锁 synchronized
有很多方法,下面给出两个方案任选其一:
1:创建一个业务层,将功能实现在业务层,让这个业务层成为单例,并将方法声明为 synchronized ,那么同一时候只会有一个调用者进入方法
2:用 Db.tx(...) 开启事务,事务级别调高点
无论用哪个方案,都建议创建一个业务 class 来做