多线程并发数据库事务问题:报错 -问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

多线程并发数据库事务问题:报错

2020-06-06 16:04:03 203 1

现在我在数据库有张表,里面有个字段是boolean类型的,表示某件事情做过没有,做过表示true,没做过表示false。

现在问题是,在java中做这个事情比较耗时,还不一定成功,做之前先去判断是否做过,但是在多线程下会遇到问题,就是这个事情是不能重复做的,但是会出现。问一下大牛们都是如何实现的。

我现在的一些方案:

1、加锁?感觉没用,除非级别提高到其他线程不能读取。

2、临时变量,做在代码里面

3、临时表,做之前更新,做完解开,如果做的时候gg,重启程序就sb了.

...

大神都出来给点意见

取消 提交回答
全部回答(1)
  • kun坤
    2020-06-06 16:04:08

    你看我这样的方案行不,直接update xxxx set zuoguo = true where zuoguou = false and id = xxx,如果返回更新成功,则做,否则的话就不做,这样应该能够避免多线程。
    ######

    这个问题要分两个方面

    第一个方面是就算重复执行,用什么逻辑让后执行的那个知道已经执行过了,自动跳出

    第二个方面就是做并发控制,让多个线程不要做同一个事情。

    以上说的完全是两个层面的事情,第一个层面是要在数据库里做好约束,避免脏数据产生。第二个层面才是多线程并发的控制。

    最简单,且正确(但容易出问题)的方法是

    select for update xxxx

    select status from xxxx

    程序判断if status == false

    执行处理代码

    update status = true

    commit

    如果status == true

    直接commit

    ######http://my.oschina.net/visualgui823/blog/640320######

    我觉得最简单的执行方式是

    UPDATE tablename
    SET flag = true
    WHERE id = 'id' AND flag = false
    然后程序判断更新的数据库行数目,如果是0,表示别人已经完成了,如果是1,表示这次完成。

    这个解决方案类似于数据库的乐观锁并发控制

    ######分配数据给多线程的时候控制一下不就行了   ######

    不用DB控制,用redis之类的。

    ######不太清楚实际并发有多大。一般的并发,完全可以通过队列来处理,然后再录入数据库。不建议在数据库上面动刀子。######建议使用redis,里面可以做事务同步。######你说的这个问题,其实和设计缓存挺像的,FutureTask+Callable来设计 ######

    引用来自“乌龟壳”的评论

    这个问题要分两个方面

    第一个方面是就算重复执行,用什么逻辑让后执行的那个知道已经执行过了,自动跳出

    第二个方面就是做并发控制,让多个线程不要做同一个事情。

    以上说的完全是两个层面的事情,第一个层面是要在数据库里做好约束,避免脏数据产生。第二个层面才是多线程并发的控制。

    最简单,且正确(但容易出问题)的方法是

    select for update xxxx

    select status from xxxx

    程序判断if status == false

    执行处理代码

    update status = true

    commit

    如果status == true

    直接commit

    ######试试 redis
    0 0
相关问答

18

回答

【大咖问答】对话PostgreSQL 中国社区发起人之一,阿里云数据库高级专家 德哥

阿里ACE 彭飞 2019-07-10 09:36:10 1045068浏览量 回答数 18

162

回答

惊喜翻倍:免费ECS+免费环境配置~!(ECS免费体验6个月活动3月31日结束)

豆妹 2014-10-29 17:52:21 226223浏览量 回答数 162

145

回答

【新手入门】云服务器linux使用手册

fanyue88888 2012-11-26 17:14:18 157748浏览量 回答数 145

8

回答

OceanBase 使用动画(持续更新)

mq4096 2019-02-20 17:16:36 337083浏览量 回答数 8

111

回答

OSS存储服务-客户端工具

newegg11 2012-05-17 15:37:18 295641浏览量 回答数 111

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 147266浏览量 回答数 22

18

回答

阿里云开放端口权限

xcxx 2016-07-20 15:03:33 646858浏览量 回答数 18

31

回答

[@倚贤][¥20]刚学完html/css/js的新手学习servlet、jsp需要注意哪些问题?

弗洛伊德6 2018-10-27 21:52:43 146066浏览量 回答数 31

38

回答

安全组详解,新手必看教程

我的中国 2017-11-30 15:23:46 259895浏览量 回答数 38

21

回答

请教一下数据量有100万条左右要什么配置?

易网网络 2013-03-27 15:18:02 192656浏览量 回答数 21
+关注
0
文章
13401
问答
问答排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载