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

前端之家收集整理的这篇文章主要介绍了java – 如何处理Web服务中的竞争条件?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用 Java Servlet实现了一个Web服务.

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

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

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

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

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

解决方法

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

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

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

猜你在找的Java相关文章