咨询一个多线程查询、更新mysql问题
有两张表,t1是机器信息表,机器名唯一,字段是:id,机器名称name,正在执行的任务数tasks;t2是任务记录表:id,机器名称name,任务状态。
接口1:每次调用此需要生成一个任务,原则是:从t1表中选择当前任务数最小的一个机器,在t2表中插入任务记录,状态是执行中,更新t1表中此机器的任务数+1。
接口2:任务执行完成后会调用此接口,将t2表中任务记录状态改成完成,并将t1表中对应的机器的正在执行任务数-1。
对于这两个接口,service层怎么实现好一点,特别是多线程情况下,同时调用接口1和接口2时,是不是得锁整张表t1啊,不然接口2里面需要更改t1中某个机器的任务数,那么对于接口1来说,在接口2执行前后获取到的数据可能就不一样,所以是否应该锁表,感觉想把锁粒度控制在行锁级别不太可行啊。
#mysql##java##多线程##面试##mysql锁##mysql面试题#
接口1:每次调用此需要生成一个任务,原则是:从t1表中选择当前任务数最小的一个机器,在t2表中插入任务记录,状态是执行中,更新t1表中此机器的任务数+1。
接口2:任务执行完成后会调用此接口,将t2表中任务记录状态改成完成,并将t1表中对应的机器的正在执行任务数-1。
对于这两个接口,service层怎么实现好一点,特别是多线程情况下,同时调用接口1和接口2时,是不是得锁整张表t1啊,不然接口2里面需要更改t1中某个机器的任务数,那么对于接口1来说,在接口2执行前后获取到的数据可能就不一样,所以是否应该锁表,感觉想把锁粒度控制在行锁级别不太可行啊。
#mysql##java##多线程##面试##mysql锁##mysql面试题#
全部评论
相关推荐
10-05 07:57
门头沟学院 后端 ProMonkey2024:5个oc?厉害!
但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享