java多线程银行存取钱,java多线程存钱取钱

  java多线程银行存取钱,java多线程存钱取钱

  最近爪哇岛学到了多线程编程中的线程同步问题,教材中的取款小程序对于理解线程和线程同步很有帮助,在此将其补充完善。

  1、建立java类

  这里建立了三个爪哇岛类,第一个账户类,用于封装账户中的各种信息;第三个拉丝类用于实现线程体;第二个类主要封装了主函数

  2、Account类

  公共类别帐户{ //封装账户编号,账户余额和两个成员变量私有字符串账号;私人双平衡;公共帐户(){ };公共账户(字符串账号,双余额){ this。账号=账号;this.balance=balance}公有空套账号(字符串账号){ this。账号=账号;} public void set balance(double balance){ this。余额=余额;}公共字符串getAccountNo(){返回账号;} public double get balance(){ return balance;} public int hashCode(){返回账号hashCode();}公共布尔等于(Object obj){ if(this==obj){ return true;} if (obj!=空对象。getclass()==帐户。class){ Account target=(Account)obj;返回target.getAccountNo().等于(账号);}返回false } }3、DrawThread类

  公共类拉丝扩展线程{ //模拟用户账户私人账户账户;//当前取钱线程所希望的取钱数私人双倍提款金额;公共DrawThread(字符串名,帐户账号,双倍提款金额){ super(名称);这个帐户=帐户;这个。提取金额=提取金额;} //当多个线程修改同一个共享数据时,将涉及数据安全问题public void run() { //使用账户作为同步监视器,任何线程进入下面同步代码块之前//必须先获得对账户账户的锁定——其他线程无法获得锁,也就无法修改它已同步(帐户){ if(帐户。get balance()=提取金额){//吐出钞票System.out.println(getName()取钱成功!吐出钞票:提取金额);/*试试{线程。睡眠(1);} catch(中断异常ex){ ex。printstacktrace();} *///修改余额账户。设置余额(账户。获取余额()-提取金额);System.out.println(t余额为:帐户。get balance());} else { system。出去。println(getName()取钱失败!余额不足!);} } } }4、DrawTest类

  公共类绘制测试{ public static void main(String[]args){//创建一个账户帐户acct=新账户( 1234567 ,1000);//模拟两个线程对同一个账户取钱新的DrawThread(jack ,acct,800).start();新的DrawThread(rose ,账号800).start();}}运行结果:

  以上程序有一点需要注意,就是用到了同步代码块。它可以解决运行()方法不具备同步安全性(即当两个线程同时发送请求时即会造成异常)

  同步代码块:

  synchronized (obj){//需要执行的代码}如果我们去掉运行()方法中的同步代码块,继续运行

  帐户acct=新账户( 1234567 ,1000);新的DrawThread(jack ,acct,800).start();新的DrawThread(rose ,账号800).start();(银行账户一共1000元杰克和玫瑰分别对同一账户取钱)

  运行结果:

  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持盛行它.

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: