欢迎来到天天文库
浏览记录
ID:37845175
大小:525.28 KB
页数:22页
时间:2019-06-01
《Java多线程(全)学习笔记(中)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、资源下载地址:http://download.csdn.net/detail/cloudyxuq/3763101四.多线程的同步以一个取钱列子来分析:(用户登录那些省略)Accout类:[java]viewplaincopy1/**银行取钱,账户类*/2publicclassAccout{3//账户编号4privateStringaccoutNo;5//账户余额6privatedoublebalance;7//账户名称8privateStringaccoutName;9publicAccout(){
2、10super();11}12publicAccout(StringaccoutNo,StringaccoutName,doublebalance){13super();14this.accoutNo=accoutNo;15this.balance=balance;16this.accoutName=accoutName;17}18publicStringgetAccoutNo(){19returnaccoutNo;20}21publicvoidsetAccoutNo(StringaccoutNo)
3、{22this.accoutNo=accoutNo;23}24publicdoublegetBalance(){25returnbalance;26}27publicvoidsetBalance(doublebalance){28this.balance=balance;29}30publicStringgetAccoutName(){31returnaccoutName;32}33publicvoidsetAccoutName(StringaccoutName){34this.accoutName
4、=accoutName;35}36//根据accoutNohe来计算Accout的hashcode和判断equals1@Override2publicinthashCode(){3returnaccoutNo.hashCode();4}5@Override6publicbooleanequals(Objectobj){7if(obj!=null&&obj.getClass()==Accout.class){8Accouttarget=(Accout)obj;9returntarget.getAcco
5、utNo().equals(accoutNo);10}11returnfalse;12}13}DrawThread类:[java]viewplaincopy14/**取钱的线程类*/15publicclassDrawThreadimplementsRunnable{16//模拟用户账户17privateAccoutaccout;18//当前取钱线程所希望取得值19privatedoubledrawAmount;20publicDrawThread(Accoutaccout,doubledrawAmo
6、unt){21super();22this.accout=accout;23this.drawAmount=drawAmount;24}25//如果多个线程修改同一个共享数据时,会发生数据安全问题26publicvoidrun(){27//账户余额大于取款金额时28if(accout.getBalance()>=drawAmount){29//取款成功30System.out.println(Thread.currentThread().getName()+accout.getAccoutName(
7、)+"取款成功:吐出钞票:"+drawAmount);31//修改余额32accout.setBalance(accout.getBalance()-drawAmount);33System.out.println("当前余额为:"+accout.getBalance());34}35//账户金额不够时36else{37System.out.println("账户金额不够,您的余额只有"+accout.getBalance());1}2}3}TestDraw测试类:[java]viewplainco
8、py4publicclassTestDraw{5publicstaticvoidmain(String[]args)throwsInterruptedException{6//创建一个用户7Accoutacct=newAccout("123456","小明",1000);8//模拟四个线程同时操作9DrawThreaddt=newDrawThread(acct,600);10//DrawThreaddt1=newDrawThread(acct,800);11Threa
此文档下载收益归作者所有