源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

java 使用线程做的一个简单的ATM存取款实例代码

  • 时间:2020-12-31 03:25 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:java 使用线程做的一个简单的ATM存取款实例代码
实现Runnable接口。当一个线程已继承了另一个类时,就只能用实现Runnable接口的方法来创建线程,且便于保持程序风格的一致性。 我们知道,一个具有生命的线程,具有下面五种状态: 创建状态 使用new运算符创建一个线程后,该线程仅仅是一个空对象,系统没有分配资源,称该线程处于创建状态(new thread) 可运行状态 使用start()方法启动一个线程后,系统为该线程分配了除CPU外的所需资源,使该线程处于可运行状态(Runnable) 运行中状态 Java运行系统通过调度选中一个Runnable的线程,使其占有CPU并转为运行中状态(Running)。此时,系统真正执行线程的run()方法。 阻塞状态 一个正在运行的线程因某种原因不能继续运行时,进入阻塞状态(Blocked) 死亡状态 线程结束后是死亡状态(Dead) 废话不多说,下面直接上代码: Java代码:
[u]复制代码[/u] 代码如下:
package pack.java.thread.atm;      /**      * 账户类;      * @author Administrator      *      */      public class Account {          private String name;  //用户名;          private int value;    //账户余额;          /**          * 存入金额;          * @param monery          */          public void putMonery(int monery){              this.value = this.value + monery;           }          /**          * 取出金额;          * @param monery          * @return 金额;          */          public int getMonery(int monery){              //判断是否账户余额是否大于 要取出的钱;              if(this.value > monery ){                  this.value = this.value - monery;                 }else{                  monery = this.value;  //账户余额不够时,则取出,所有的账户余额的金额.                   this.value = 0;              }              //返回取出的钱;              return monery;          }          /**          * 查询余额;          * @return 返回账户余额;          */          public int search(){              return this.value;          }          public String getName() {              return name;          }          public void setName(String name) {              this.name = name;          }          public int getValue() {              return value;          }          public void setValue(int value) {              this.value = value;          }      }
java代码:
[u]复制代码[/u] 代码如下:
import java.io.Serializable;  /**  * 取款线程类;  * @author Administrator  *  */  public class FetchMoney extends Thread implements Serializable{      private static final long serialVersionUID = -5059599151558445815L;      private Account account;  //账户对象;      private int monery;       //余额;      public FetchMoney(){          super();      }      public FetchMoney(int monery,Account account){          this.account = account;          this.monery = monery;      }      @Override      public void run() {          // TODO Auto-generated method stub          int currMonery  = account.search();  //当前余额;          synchronized (account) {              try {                  sleep(5);   //取款发费的时间;              } catch (InterruptedException e) {                  // TODO Auto-generated catch block                  e.printStackTrace();              }              //取出余额;              int getMonery = account.getMonery(monery);              System.out.println("尊敬的"+account.getName()+"用户您好!"+"当前的余额为:"+currMonery +"元."+"取出余额为:"+getMonery+"元."+"账户余额为:"+account.search()+"元");          }      }  }
java代码:
[u]复制代码[/u] 代码如下:
/**  * 存款线程类;  * @author Administrator  *  */  public class SaveMoney extends Thread implements Serializable{      private static final long serialVersionUID = 3095120546560212724L;      private Account account;  //账户对象;      private int money;        //金额;      public SaveMoney(){          super();      }      public SaveMoney(int money,Account account){          this.account = account;          this.money = money;      }      @Override      public void run() {          // TODO Auto-generated method stub          int currMonery = account.search(); //查询账户余额;          //同步对象,只允许单线程操作;          synchronized (account) {              try {                  sleep(5);  //查询的时候,发费得时间;              } catch (InterruptedException e) {                  // TODO Auto-generated catch block                  e.printStackTrace();              }              account.putMonery(this.money);   //插入金额;              //输出存款信息;              System.out.println("尊敬的"+account.getName()+"用户您好!"+"当前的余额为:"+currMonery +"元."+"存入余额为:"+this.money+"元."+"账户余额为:"+account.search()+"元");          }      }  }
java代码:
[u]复制代码[/u] 代码如下:
/**  * ATM测试类;  * @author Administrator  *  */  public class ThreadATMDemo {      /**      * 主方法;      * @param args      */      public static void main(String[] args) {          // TODO Auto-generated method stub          Account account = new Account();          //设置用户名;          account.setName("ZhouHaiTao");          //初始化余额;          account.setValue(0);          //存入100;          new SaveMoney(100,account).start();          //存入200;          new SaveMoney(200, account).start();          //取出500;          new FetchMoney(500, account).start();      }  }
程序运行结果如下: 尊敬的ZhouHaiTao用户您好!当前的余额为:0元.存入余额为:100元.账户余额为:100元 尊敬的ZhouHaiTao用户您好!当前的余额为:0元.存入余额为:200元.账户余额为:300元 尊敬的ZhouHaiTao用户您好!当前的余额为:0元.取出余额为:300元.账户余额为:0元
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部