请教一个基本线程问题,在实际中的解决方案

在最初学多线程的时候,肯定哪本书上都会举这个例子,张三有1000块钱,别人给他打100块,同时他自己又在给别人转100块,如果出现线程问题,可能再出现,打钱进程读到了10... 在最初学多线程的时候,肯定哪本书上都会举这个例子,张三有1000块钱,别人给他打100块,同时他自己又在给别人转100块,如果出现线程问题,可能再出现,打钱进程读到了1000,然后减去100,但还没来得急赋值回去,原本的1000就又被转账进程读走了并拿去执行1000-100;之后打钱进程赋值1100,最后转账进程赋值900;造成张三莫名其妙少了100

一般书上肯定就拿这个例子引出多线程,说在汇款转账方法上加上synchronized

但是我想问的是,实际应用中是怎么处理的?我觉得不可能是synchronized吧?毕竟访问量可能非常巨大,一旦加了synchronized,那后面的人岂不是要等死了,所以我想问问在实际环境中是怎么处理类似多线程问题的?
展开
 我来答
小童鞋_成er
2014-08-04 · 知道合伙人数码行家
小童鞋_成er
知道合伙人数码行家
采纳数:4650 获赞数:22879
主要从事J2EE工作,热爱Java,用心讨论技术,共同进步。

向TA提问 私信TA
展开全部
你好,提问者:
首先多线程是对的,多线程加synchronized也是没有问题的。
其次,当两个人同时操作一个用户金额时,才会产生多线程。
我们也知道,现在的取款机都是分布,而金额不是共享的。
追问
【现在的取款机都是分布,而金额不是共享的】
这个意思是指的,每处提款机的金额是独立的么?可是即便是独立的那也是要汇总的吧,因为不会出现我在这个提款机上查我的余额是一个数,到了另外一个上面又成了另一个数

我觉得,归根结底也会有一个最核心的数据库,来保存金额吧,否则各处的数据同步要怎么做呢?
追答
嗯,你可以了解一下高并发。。。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式