银行异地取款手续费取款问题

一个关于事务并发的问题,银行取钱问题
[问题点数:40分,结帖人tim]
本版专家分:0
结帖率 100%
CSDN今日推荐
本版专家分:421
本版专家分:84109
2014年2月 总版技术专家分月排行榜第一
2014年1月 总版技术专家分月排行榜第二2013年12月 总版技术专家分月排行榜第二
2016年10月优秀小版主
2014年4月 荣获微软MVP称号
本版专家分:0
结帖率 100%
本版专家分:84109
2014年2月 总版技术专家分月排行榜第一
2014年1月 总版技术专家分月排行榜第二2013年12月 总版技术专家分月排行榜第二
2016年10月优秀小版主
2014年4月 荣获微软MVP称号
本版专家分:84109
2014年2月 总版技术专家分月排行榜第一
2014年1月 总版技术专家分月排行榜第二2013年12月 总版技术专家分月排行榜第二
2016年10月优秀小版主
2014年4月 荣获微软MVP称号
本版专家分:3439
本版专家分:0
结帖率 100%
本版专家分:0
结帖率 100%
本版专家分:84109
2014年2月 总版技术专家分月排行榜第一
2014年1月 总版技术专家分月排行榜第二2013年12月 总版技术专家分月排行榜第二
2016年10月优秀小版主
2014年4月 荣获微软MVP称号
本版专家分:84109
2014年2月 总版技术专家分月排行榜第一
2014年1月 总版技术专家分月排行榜第二2013年12月 总版技术专家分月排行榜第二
2016年10月优秀小版主
2014年4月 荣获微软MVP称号
本版专家分:0
结帖率 100%
本版专家分:3439
本版专家分:3439
本版专家分:84109
2014年2月 总版技术专家分月排行榜第一
2014年1月 总版技术专家分月排行榜第二2013年12月 总版技术专家分月排行榜第二
2016年10月优秀小版主
2014年4月 荣获微软MVP称号
本版专家分:0
结帖率 100%
本版专家分:84109
2014年2月 总版技术专家分月排行榜第一
2014年1月 总版技术专家分月排行榜第二2013年12月 总版技术专家分月排行榜第二
2016年10月优秀小版主
2014年4月 荣获微软MVP称号
匿名用户不能发表回复!|
CSDN今日推荐我热爱的不只是Java,而是编程本身。
线程安全经典案例:银行取钱问题
银行取钱的基本流程基本上可以分为如下几个步骤。
(1)用户输入账户、密码,系统判断用户的账户、密码是否匹配。
(2)用户输入取款密码
(3)系统判断账户余额是否大于取款余额
(4)如果余额大于取款余额,则取钱成功;如果余额小于取款余额,则取钱失败。
1、先定义一个账户类,该账户类封装了账号和余额两个实例变量。
public class Account {
private String accountNo;
private double
public Account() {
public Account(String accountNo, double balance) {
this.accountNo = accountNo;
this.balance =
public String getAccountNo() {
return accountNo;
public void setAccountNo(String accountNo) {
this.accountNo = accountNo;
public double getBalance() {
public void setBalance(double balance) {
this.balance =
public int hashCode() {
return accountNo.hashCode();
public boolean equals(Object obj) {
if(this==obj)
return true;
if(obj != null && obj.getClass() == Account.class){
Account target=(Account)
return target.getAccountNo().equals(accountNo);
return false;
2、提供一个取钱的线程类,该线程类根据根据执行账户、取钱数量进行取钱操作,取钱的逻辑是当其余额不足时无法提取现金,当余额足够时系统吐出钞票,余额减少。
public class DrawThread extends Thread{
private double drawA
public DrawThread(String name,Account account, double drawAmount) {
super(name);
this.account =
this.drawAmount = drawA
public void run(){
if(account.getBalance()&=drawAmount){
System.out.println(getName()+":取钱成功!吐出钞票:"+drawAmount);
Thread.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
account.setBalance(account.getBalance()-drawAmount);
System.out.println("\t余额为:"+account.getBalance());
System.out.println(getName()+"取钱失败!余额不足!");
3、主程序创建一个账户,启动两个线程,执行取钱操作。
public class DrawTest {
public static void main(String[] args) {
Account acct=new Account("0329",1000);
new DrawThread("老张",acct,800).start();
new DrawThread("老王",acct,800).start();
后台输出:
老张:取钱成功!吐出钞票:800.0
老王:取钱成功!吐出钞票:800.0
余额为:200.0
余额为:-600.0
&&&&注意:程序中有两个并发线程在修改Account对象,系统恰好在try-catch处执行线程切换,切换给另一个修改Account对象的线程,所以出现了问题。
解决方案:
&&&&Java的多线程支持引入了同步监视器来解决这个问题,使用同步监视器的通用方法就是同步代码块。同步代码块的语法格式如下:
&&&&synchronized(obj){
synchronized(account){
if(account.getBalance()&=drawAmount){
System.out.println(getName()+":取钱成功!吐出钞票:"+drawAmount)
Thread.sleep(1000)
}catch(InterruptedException e){
e.printStackTrace()
account.setBalance(account.getBalance()-drawAmount)
System.out.println("\t余额为:"+account.getBalance())
System.out.println(getName()+"取钱失败!余额不足!")
后台输出:
老张:取钱成功!吐出钞票:800.0
余额为:200.0
老王取钱失败!余额不足!
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!查看: 1998|回复: 7
分享银行取款经验一则(附换零钱办法)
阅读权限30
在线时间 小时
手机阅读本帖:
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
才可以下载或查看,没有帐号?
一、你急着取一千块钱用,但到取款机前一看,排了老长的队,你一看银行柜台没多少人,就上前去取,可人家银行工作人员说:俺们有规定,小于一万元的取款,要到取款机上去办理,柜台不办理“。——————怎么办???
合理利用规则:1、到银行柜台取一万块钱;
& && && && && && && &2、数一千块钱出来,剩余九千存回去。
二、一换零钱有一次哥哥结婚叫我去换50张20元的人民币发小红包用.拿了1k去银行换,sp态度极其不好的说:没有,不能换给你,态度实在恶劣呀.我十分凶的反问:&你再说一次?家伙很牛的说:&就是没有&我说:你等着?sp说:你威胁我啊?我拿了身份证说:开户,存1k!结束了.我说:&再提20,连着提了二次20.sp说:你什么意思啊?我说取钱,我取50次再销户,sp灰溜溜的换了50张崭新20元给我,贱!
<p id="rate_48" onmouseover="showTip(this)" tip="&魅力 + 25 ℃
" class="mtn mbn">
<p id="rate_" onmouseover="showTip(this)" tip="&魅力 + 30 ℃
" class="mtn mbn">
阅读权限40
在线时间 小时
这个可以有
阅读权限200
在线时间 小时
果然给力,加分分
阅读权限60
在线时间 小时
又学了一招!
阅读权限70
在线时间 小时
、、、、、、,尽在
厉害& && && && && && && && && && && && && && &
阅读权限80
在线时间 小时
第一招管用,后面基本不行吧,一般取钱都是自己补差价,他给整的么
阅读权限70
在线时间 小时
人才,,下次可以试试看
阅读权限40
在线时间 小时
Powered by取款3000银行给3万3次登门还款却遭拒
南京多付款银行晚上才着急找到取款下岗女士收回款项
本报综合报道 6月5日下午,下岗女工杜女士到南京市中央门一银行取款时,将存折上仅有的3000元钱全部取出,结果银行一下就多给了2.7万元现钞。到别处购物付款发现银行多给钱后,担心会出问题的杜女士随即报警求助,然而杜女士在警察陪同下赶到银行退款时,银行不仅拒收这笔市民主动退款,反而将杜女士一行赶出了银行。
购物时发现银行多给2.7万
杜女士表示,临近端午节,打算取钱买点东西。“手续完成后,银行服务员将钱放进了一个信封。拿到钱后我没有清点,就急忙塞进包里往金桥市场跑,所以当时也没有发现银行多给钱。”讲到3000元现金多出2.7万元为何当场没能发现(购物时才发现),杜女士也显得很无辜。
银行拒收还款还称“不差钱”
为了找一个人能够证明还款过程,杜女士半道喊来了自己的朋友蔡先生,但是两人赶到银行后,这家银行的工作人员连听都未听进去,迅速将他们赶出银行大门,随后“哐当”一声将银行大门无情地关上,然后隔着门缝说:“银行下班了,正在结账!”
不一会儿,一辆运钞车来了,银行大门开了,杜女士与蔡先生又进银行还钱,这时这家银行的一位行长过来了,说明来意后,这家银行的行长也是连听都未听进去,迅速将杜女士和蔡先生关在银行大门外。
由于担心今后出现什么乱子,为了早些将这2.7万元现金还回银行,杜女士最后选择了报警。随后,杜女士和蔡先生在民警的陪同下第三次找上银行要还款,但是银行给出的答案是:“银行不差钱!”最后杜女士只好将2.7万现金暂时交给派出所保管。
晚上7时半,多付客户2.7万元现金的银行发现账面现金不对后,这家银行包括行长、科长、业务经理和柜台工作人员才显得着急起来。在确认客户杜女士已将27000元暂时保存在派出所时,工作人员与派出所民警清点了27000元现金,并办理了移交手续。(新 华)
相关阅读:(发现远行)
(百合丘的手抓饼)
(ONESTEP豆瓣)
第三方登录:}

我要回帖

更多关于 中国银行atm取款限额 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信