开发者社区> 问答> 正文

2个线程怎么同时调用一个存储过程

要求是这样的:
1.在数据库中新建一个用户状态表。里面包含2个字段。user_status(userid bigint,status int)
userid为自增。
status默认为0;
插入1000条记录。
2.写一个存储过程,从user_status表中获取一条status=0的userid字段的值,取出userid时,需要同时把这条记录对应的status从0修改为1.
3.开启2个线程,在线程中循环调用第2步中的存储过程,直到user_status表中记录全部取完(即status全部为1)。要求:在2个线程中取出的userid不能重复。并把取出的userid,打印到某个文件中,一行一个userid
第一点,没啥问题吧应该,我在数据库里建好了。
第二点的话,我写的存储过程是:
screenshot
第三点的代码:
screenshot
screenshot
可是到最后,我不能在txt里得到1000条数据,总是缺少一些条目,但是数据库里却更新了……
如果我把存储过程改为
screenshot
这样运行又会报死锁错误
好吧,多线程的问题和存储过程不怎么会啊,求指教啊!

展开
收起
蛮大人123 2016-02-20 10:39:48 3690 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    一:在表中新增一个job字段,这个job取序列号;
    二:每次执行存储过程时先获取一个序列,并且写在要操作数据的那个表中;
    三:做完步骤二的更新后用这个job查询出这个序列的数据进行业务;
    四:做完业务后,将job的数据更新为空.
    另外有个重置的行程,更新job在处理时有挂死或者超时的情况,比如你的job不为空,但是status一直还是0.过了一个小时还是这样,就必须重置了
    这样每个job处理的数据全都是自己的数据.希望给你帮助。

    2019-07-17 18:45:09
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载