Java多线程同步示例(银行卡存取款)

Bank类,定义账号、账号余额属性,定义存款方法与取款方法并上同步

1package person.xsc.practice; 2import java.util.Scanner; 3public class Bank { 4 private String account;// 账号 5 private int balance;// 账户余额 6 public Bank(String account, int balance) { 7 this.account = account; 8 this.balance = balance; 9 } 10 public String getAccount() { 11 return account; 12 } 13 public void setAccount(String account) { 14 this.account = account; 15 } 16 public int getBalance() { 17 return balance; 18 } 19 public void setBalance(int balance) { 20 this.balance = balance; 21 } 22 @Override 23 public String toString() { 24 return "Bank [账号:" + account + ", 余额:" + balance + "]"; 25 } 26 // 存款 27 public synchronized void saveAccount() { 28 // 获取当前的账号余额 29 int balance = getBalance(); 30 // 修改余额 31 balance +=100; 32 // 修改账户余额 33 setBalance(balance); 34 // 输出存款后的账户余额 35 System.out.println(account+"存款后的账户余额为:" + balance); 36 } 37 38 public synchronized void drawAccount() { 39 // 获得当前的帐户余额 40 int balance = getBalance(); 41 // 修改余额 42 balance = balance - 200; 43 // 修改帐户余额 44 setBalance(balance); 45 System.out.println(account+"取款后的帐户余额:" + balance); 46 } 47} 48

取款线程

1package person.xsc.practice; 2//取款 3public class DrawAccount implements Runnable{ 4 Bank bank; 5 public DrawAccount(Bank bank){ 6 this.bank=bank; 7 } 8 @Override 9 public void run() { 10 bank.drawAccount(); 11 } 12 13} 14

存款线程

1package person.xsc.practice; 2//存款 3public class SaveAccount implements Runnable{ 4 Bank bank; 5 public SaveAccount(Bank bank){ 6 this.bank=bank; 7 } 8 public void run(){ 9 bank.saveAccount(); 10 } 11} 12

测试类

1package person.xsc.practice; 2public class Test { 3 public static void main(String[] args) { 4 // 创建帐户,给定余额为1000 5 Bank bank=new Bank("1001",1000); 6 //创建线程对象 7 SaveAccount sa=new SaveAccount(bank); 8 DrawAccount da=new DrawAccount(bank); 9 Thread save=new Thread(sa); 10 Thread draw=new Thread(da); 11 save.start(); 12 draw.start(); 13 try { 14 save.join(); 15 draw.join(); 16 } catch (InterruptedException e) { 17 // TODO Auto-generated catch block 18 e.printStackTrace(); 19 } 20 System.out.println(bank); 21 } 22 23} 24

输出

11001存款后的账户余额为:1100 21001取款后的帐户余额:900 3Bank [账号:1001, 余额:900] 4
点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

AWS国庆双重礼,仅限7天

自2021年10月1日00:00起至2021年10月7日24:00,新注册并激活(需全部完成账号注册的五个步骤,否则账号状态并未激活)AWS海外区域账户,填写页面下方表单,即可申领价值$200美元的AWS海外区域账户服务抵扣券直充到您的账户,用以抵扣服务消费,助您轻松体验多个云迁移应用场景。同时,您还可获赠AWS精美祥云纪念T恤一件。$200美元A

AWS国庆双重礼,仅限7天

自2021年10月1日00:00起至2021年10月7日24:00,新注册并激活(需全部完成账号注册的五个步骤,否则账号状态并未激活)AWS海外区域账户,填写页面下方表单,即可申领价值$200美元的AWS海外区域账户服务抵扣券直充到您的账户,用以抵扣服务消费,助您轻松体验多个云迁移应用场景。同时,您还可获赠AWS精美祥云纪念T恤一件。$200美元A

AWS国庆双重礼,仅限7天

自2021年10月1日00:00起至2021年10月7日24:00,新注册并激活(需全部完成账号注册的五个步骤,否则账号状态并未激活)AWS海外区域账户,填写页面下方表单,即可申领价值$200美元的AWS海外区域账户服务抵扣券直充到您的账户,用以抵扣服务消费,助您轻松体验多个云迁移应用场景。同时,您还可获赠AWS精美祥云纪念T恤一件。$200美元A

国庆假期玩不停,双重好礼放肆领

自2021年10月1日00:00起至2021年10月7日24:00,新注册并激活(需全部完成账号注册的五个步骤,否则账号状态并未激活)AWS海外区域账户,填写页面下方表单,即可申领价值$200美元的AWS海外区域账户服务抵扣券直充到您的账户,用以抵扣服务消费,助您轻松体验多个云迁移应用场景。同时,您还可获赠AWS精美祥云纪念T恤一件。,仅限7天AW

国庆假期玩不停双重好礼放肆领

自2021年10月1日00:00起至2021年10月7日24:00,新注册并激活(需全部完成账号注册的五个步骤,否则账号状态并未激活)AWS海外区域账户,填写页面下方表单,即可申领价值$200美元的AWS海外区域账户服务抵扣券直充到您的账户,用以抵扣服务消费,助您轻松体验多个云迁移应用场景。同时,您还可获赠AWS精美祥云纪念T恤一件。,仅限7天AW