采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,你好 最近在做一个学校里面小项目,涉及到管理员审核上传资料,如果审核通过会为用户增加积分。 这里为用户增加积分是不是存在并发安全问题呀,如果有多个管理员用户在审核同一个用户提交的不同内容时,是有可能存在并发安全问题吧?一般这种问题是怎么解决的呢? 我的想法: 1.使用synchronized类锁,但是这种性能貌似不是很好 2.基于cas机制来实现积分的更新 老师可以不可以提供一下其他的思路呢?
super 同学你好:
我理解你提出的问题,但是,其实这里的问题并不是并发问题,而是你没有真正的理解什么是“并发安全”,且也不清楚多实例部署的含义(多实例的情况下,synchronized 或 CAS 是不能起到作用的)。那么,这个审核用户内容的操作会不会有并发安全的问题呢?显然你可以忽略掉。原因是:
(1)如果多个管理员审核的是相同的用户信息,那么,实际上,修改只会体现到数据库上。所以,应该是在数据存储层面解决多次审核的问题;
(2)如果多个管理员审核的不是相同的用户信息,那么,就无所谓了,不会有任何影响,本来就不是相同的信息,分为不同的管理员审核会有什么问题呢?
synchronized 是在一个实例的运行中处理多线程的竞争问题的,性能问题可以忽略掉,不至于说 JVM 的这个关键字会影响到性能;CAS 是乐观锁,也是单个实例在多线程并发修改变量的时候才会使用到的。而你这里所说的问题,与这两个特性无关。
我是勤一,致力于将这门课程的问答区打造为 Java 知识体系知识库,Java 知识体系 BBS!共同建造、维护这门课程,我需要每一个你!
老师我举个例子吧 就是用户表中有积分这个列,如果一个用户提交了两个分享内容,然后恰好两个管理员分别审核不同的分享内容,在审核通过之后,需要为用户加积分(加积分需要先查原积分,然后更新积分到数据库中)这就有可能出现审核完成之后,只加了一次积分的现象实际上应该加两次积分。
可能是我描述的不清晰,老师我一会可以把代码贴一下
哦哦,这样是可能会存在问题的,不过,出现问题的概率是很低的。我个人建议使用 CAS 的方式去更新数据表,乐观锁的方式。
登录后可查看更多问答,登录/注册
掌握业务开发中各种类型的坑,,Java web开发领域通用
1.7k 4
1.2k 3
1.0k 12
1.0k 2
1.7k 3