java多线程怎么实现取款小程序
导读:本文共1900字符,通常情况下阅读需要6分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 1、建立java类这里建立了三个java类,第一个Account类,用于封装账户中的各种信息;第三个DrawThread类用于实现线程体;第二个类主要封装了主函数2、Account类publicclassAccount{//封装账户编号,账户余额和两个成员变量privateStringaccountNo;privatedoublebalance;pub... ...
音频解说
目录
(为您整理了一些要点),点击可以直达。1、建立java类
这里建立了三个java类,第一个Account类,用于封装账户中的各种信息;第三个DrawThread类用于实现线程体;第二个类主要封装了主函数
2、Account类
publicclassAccount{//封装账户编号,账户余额和两个成员变量privateStringaccountNo;privatedoublebalance;publicAccount(){};publicAccount(StringaccountNo,doublebalance){this.accountNo=accountNo;this.balance=balance;}publicvoidsetAccountNo(StringaccountNo){this.accountNo=accountNo;}publicvoidsetBalance(doublebalance){this.balance=balance;}publicStringgetAccountNo(){returnaccountNo;}publicdoublegetBalance(){returnbalance;}publicinthashCode(){returnaccountNo.hashCode();}publicbooleanequals(Objectobj){if(this==obj){returntrue;}if(obj!=null&&obj.getClass()==Account.class){Accounttarget=(Account)obj;returntarget.getAccountNo().equals(accountNo);}returnfalse;}}
3、DrawThread类
publicclassDrawThreadextendsThread{//模拟用户账户privateAccountaccount;//当前取钱线程所希望的取钱数privatedoubledrawAmount;publicDrawThread(Stringname,Accountaccount,doubledrawAmount){super(name);this.account=account;this.drawAmount=drawAmount;}//当多个线程修改同一个共享数据时,将涉及数据安全问题publicvoidrun(){//使用account作为同步监视器,任何线程进入下面同步代码块之前//必须先获得对account账户的锁定——其他线程无法获得锁,也就无法修改它synchronized(account){if(account.getBalance()>=drawAmount){//吐出钞票System.out.println(getName()+"取钱成功!吐出钞票:"+drawAmount);/*try{Thread.sleep(1);}catch(InterruptedExceptionex){ex.printStackTrace();}*///修改余额account.setBalance(account.getBalance()-drawAmount);System.out.println("\t余额为:"+account.getBalance());}else{System.out.println(getName()+"取钱失败!余额不足!");}}}}
4、DrawTest类
publicclassDrawTest{publicstaticvoidmain(String[]args){//创建一个账户Accountacct=newAccount("1234567",1000);//模拟两个线程对同一个账户取钱newDrawThread("jack",acct,800).start();newDrawThread("rose",acct,800).start();}}
运行结果:
以上程序有一点需要注意,就是用到了同步代码块。它可以解决run()方法不具备同步安全性(即当两个线程同时发送请求时即会造成异常)
同步代码块:
synchronized(obj){//需要执行的代码}
如果我们去掉run()方法中的同步代码块,继续运行
Accountacct=newAccount("1234567",1000);newDrawThread("jack",acct,800).start();newDrawThread("rose",acct,800).start();
(银行账户一共1000元,Jack和rose分别对同一账户取钱)
运行结果:
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:
java多线程怎么实现取款小程序的详细内容,希望对您有所帮助,信息来源于网络。