开发者社区> 问答> 正文

关于Jfinal Controller 多线程情况下,读取数据库共享变量问题!:报错

@JFinal 你好,想跟你请教个问题:

我先描述下场景:   我们在使用jfinal开发一个项目有一个场景是这样的: 有一个预约功能,例如只能预约五个人,那么预约成功一次会在数据库添加一条预约记录, 在添加预约记录之前是通过 查看预约记录的总数来判断是否可以预约, 但是在多线程的情况下,就会出现多个用户同时满足预约条件同时预约,然后我的想法是:打算进行加锁让判断的预约条件的代码在多线程下,只能有一个线程执行,但是看了jfinal源代码 发现Jfinal的Controller是线程安全的,每一次都是new的新实例,代表每次都是不同对象,所以不能加锁,  最后的解决方案是将预约判断条件放在Validate中做了,解决了问题, 我想问下这类问题,是否在jfinal中是否有其他的解决方案(消息队列除外)。 多谢赐教

在Controller中 多线程中 如何保证一段代码 同一个时间点只能被一个线程执行?

 

展开
收起
kun坤 2020-06-06 16:53:04 598 0
1 条回答
写回答
取消 提交回答
  • 有很多方法,下面给出两个方案任选其一:

    1:创建一个业务层,将功能实现在业务层,让这个业务层成为单例,并将方法声明为 synchronized ,那么同一时候只会有一个调用者进入方法

    2:用 Db.tx(...) 开启事务,事务级别调高点

    无论用哪个方案,都建议创建一个业务 class 来做

    ######

    thanks 

    ######

    加锁 synchronized

    2020-06-06 16:53:09
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
DTCC 2022大会集锦《云原生一站式数据库技术与实践》 立即下载
阿里云瑶池数据库精要2022版 立即下载
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载