加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何处理Web服务中的竞争条件?

发布时间:2020-12-14 05:23:01 所属栏目:Java 来源:网络整理
导读:我使用 Java Servlet实现了一个Web服务. 我得到以下设置: 有一个处理“工作”条目的数据库.每个作业都有“执行”或“排队”或“完成”的状态.如果用户启动新作业,则在数据库中创建一个作业,状态为“队列”中的条目. 只有执行少于5个其他作业时,才能执行该作
我使用 Java Servlet实现了一个Web服务.

我得到以下设置:
有一个处理“工作”条目的数据库.每个作业都有“执行”或“排队”或“完成”的状态.如果用户启动新作业,则在数据库中创建一个作业,状态为“队列”中的条目.

只有执行少于5个其他作业时,才能执行该作业.如果还有其他五个已经执行状态需要保留在队列中,并且Cronjob稍后将处理此作业的执行.

现在我只是想知道,如果现在执行的工作不到五个,我的脚本将执行这个工作.但是如果同时在我的脚本询问数据库中执行了多少个作业和脚本开始执行作业的同时,另一个用户的另一个请求就会创建一个作业,并且还会得到“四个执行作业”数据库.

那么会有一个比赛条件,6个工作将被执行.

如何防止这样的事情?
任何建议?非常非常感谢你!

解决方法

如果我理解正确,并且您可以控制将请求发送到DB的应用程序层,则可以使用信号量来控制正在访问数据库的人员.

信号量在某种程度上就像交通信号灯.他们只访问N个线程的关键代码.所以,你可以设置N到5,并且只允许关键代码中的线程改变它们的状态来执行等等.

Here是一个很好的教程,使用它们.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读