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

实现Runnable接口。当一个线程已继承了另一个类时,就只能用实现Runnable接口的方法来创建线程,且便于保持程序风格的一致性。

我们知道,一个具有生命的线程,具有下面五种状态:

创建状态

使用new运算符创建一个线程后,该线程仅仅是一个空对象,系统没有分配资源,称该线程处于创建状态(new thread)

可运行状态

使用start()方法启动一个线程后,系统为该线程分配了除CPU外的所需资源,使该线程处于可运行状态(Runnable)

运行中状态

Java运行系统通过调度选中一个Runnable的线程,使其占有CPU并转为运行中状态(Running)。此时,系统真正执行线程的run()方法。

阻塞状态

一个正在运行的线程因某种原因不能继续运行时,进入阻塞状态(Blocked)

死亡状态

线程结束后是死亡状态(Dead)

废话不多说,下面直接上代码:

Java代码:

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代码:

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代码:

/**

* 存款线程类;

* @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代码:

/**

* 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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值