ATM存取机的实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java语言编写的ATM存取机的实现(线程的同步)所谓线程同步是指多个线程同时访问某一个共享资源时,需要保证在同一时间最多只能有一个线程访问该资源。本例将以ATM存取一体机采用线程同步与否为例,来向读者展示synchronized关键字的用法。运行效果如下:

1.存、取线程没有采取同步时,执行存取操作时,其工作流程如下:

当前账户中所剩余额为:150.85;存入金额为:700.0

正在操作,请稍等......

查询余额显示,当前可用余额为:150.85;取出金额为:200.0

正在操作,请稍等......

操作成功,存入金额:700.0

当前余额为:850.85元

操作成功,取出金额:200.0

当前余额为:650.85元

2.存、取线程设置为同步时,执行存取操作时,其工作流程如下:

当前账户中所剩余额为:150.85;存入金额为:700.0

正在操作,请稍等......

操作成功,存入金额为:700.0

当前余额为:850.85元

查询余额显示,当前可用余额为850.85;取出金额为:200.0

正在操作,请稍等......

操作成功,取出金额为:200.0

当前余额为:650.85元

【实现过程】

(1)新建项目,取名ATM_Machine(项目名自取,类名一样),并创建一个ATMCashMachines.java文件,实现两次线程对ATM的读取与写入。主要代码如下:

package ATMCashMachines;

public class ATMCashMachines {

public static void main(String[] args) {

Bank bank = new Bank();

SyncBank sbank = new SyncBank();

System.out.println("1.存、取线程没有采取同步时,执行存取操作时,其工作流程如下:");

Thread putThread = new CashMachines(bank, "saveMoney");

Thread takeThread = new CashMachines(bank, "withdrawMoney"); putThread.start();

takeThread.start();

try{

putThread.join();

takeThread.join();

}catch (Exception e){

System.out.println("两线程运行出错:" + e.getMessage());

}

System.out.println();

bank = new Bank();

System.out.println("2.存、取线程设置为同步时,执行存取操作时,其工作流程如下:");

putThread = new CashMachines(sbank, "sync_SaveMoney");

takeThread = new CashMachines(sbank, "sync_WithdrawMoney");

putThread.start();

takeThread.start();

}

}

(2)非同步机制处理,创建Bank.java文件,主要代码如下:package ATMCashMachines;

public class Bank {

private double curveMoney = 150.85;

public void saveMoney(double putThread) {

System.out.println("当前账户中所剩余额为:" + this.curveMoney + ";存入金额为:" + putThread);

System.out.println("正在操作,请稍等......");

try{

Thread.sleep(300);

}catch(Exception e){

e.printStackTrace();

}

System.out.println("操作成功,存入金额:" + putThread);

this.curveMoney = this.curveMoney + putThread;

System.out.println("当前余额为:" + this.curveMoney + "元");

}

public void withdrawMoney(double takeThread) {

System.out.println("查询余额显示,当前可用余额为:"+ this.curveMoney + ";取出金额为:" + takeThread);

System.out.println("正在操作,请稍等......");

try{

Thread.sleep(500);

}catch(Exception e){

e.printStackTrace();

}

System.out.println("操作成功,取出金额:" + takeThread);

this.curveMoney = this.curveMoney - takeThread;

System.out.println("当前余额为:" + this.curveMoney + "元");

}

}

(3)ATM进行同步机制处理,创建SyncBank.java文件,执行同样的读取和写入操作。主要代码如下:

package ATMCashMachines;

public class SyncBank {

private double curveMoney = 150.85;

public synchronized void sync_SaveMoney(double putThread) { System.out.println("当前账户中所剩余额为:" + this.curveMoney + ";存入金额为:" + putThread);

System.out.println("正在操作,请稍等......");

try{

Thread.sleep(300);

}catch(Exception e){

e.printStackTrace();

}

System.out.println("操作成功,存入金额为:" + putThread);

this.curveMoney = this.curveMoney + putThread;

System.out.println("当前余额为:" + this.curveMoney + "元");

}

public synchronized void sync_WithdrawMoney(double takeThread) {

相关文档
最新文档