要求是这样的:
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
第一点,没啥问题吧应该,我在数据库里建好了。
第二点的话,我写的存储过程是:
第三点的代码:
可是到最后,我不能在txt里得到1000条数据,总是缺少一些条目,但是数据库里却更新了……
如果我把存储过程改为
这样运行又会报死锁错误
好吧,多线程的问题和存储过程不怎么会啊,求指教啊!
一:在表中新增一个job字段,这个job取序列号;
二:每次执行存储过程时先获取一个序列,并且写在要操作数据的那个表中;
三:做完步骤二的更新后用这个job查询出这个序列的数据进行业务;
四:做完业务后,将job的数据更新为空.
另外有个重置的行程,更新job在处理时有挂死或者超时的情况,比如你的job不为空,但是status一直还是0.过了一个小时还是这样,就必须重置了
这样每个job处理的数据全都是自己的数据.希望给你帮助。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。