并发安全问题的解决方案
来源:2-1 如何从根源避免空指针
superLiuLiuLiu
2020-09-16
老师,你好 最近在做一个学校里面小项目,涉及到管理员审核上传资料,如果审核通过会为用户增加积分。
这里为用户增加积分是不是存在并发安全问题呀,如果有多个管理员用户在审核同一个用户提交的不同内容时,是有可能存在并发安全问题吧?一般这种问题是怎么解决的呢?
我的想法:
1.使用synchronized类锁,但是这种性能貌似不是很好
2.基于cas机制来实现积分的更新
老师可以不可以提供一下其他的思路呢?
1回答
-
super 同学你好:
我理解你提出的问题,但是,其实这里的问题并不是并发问题,而是你没有真正的理解什么是“并发安全”,且也不清楚多实例部署的含义(多实例的情况下,synchronized 或 CAS 是不能起到作用的)。那么,这个审核用户内容的操作会不会有并发安全的问题呢?显然你可以忽略掉。原因是:
(1)如果多个管理员审核的是相同的用户信息,那么,实际上,修改只会体现到数据库上。所以,应该是在数据存储层面解决多次审核的问题;
(2)如果多个管理员审核的不是相同的用户信息,那么,就无所谓了,不会有任何影响,本来就不是相同的信息,分为不同的管理员审核会有什么问题呢?
synchronized 是在一个实例的运行中处理多线程的竞争问题的,性能问题可以忽略掉,不至于说 JVM 的这个关键字会影响到性能;CAS 是乐观锁,也是单个实例在多线程并发修改变量的时候才会使用到的。而你这里所说的问题,与这两个特性无关。
我是勤一,致力于将这门课程的问答区打造为 Java 知识体系知识库,Java 知识体系 BBS!共同建造、维护这门课程,我需要每一个你!
332020-09-16
相似问题