咨询一个多线程查询、更新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面试题#
全部评论
相关推荐
点赞 评论 收藏
分享