如何用Java线程实现银行的存款取款问题最好能写出编出的具体程序

如何用Java线程实现银行的存款取款问题最好能写出编出的具体程序,第1张

AccountTest.java class BankAccount //定义银行账户类BankAccount{private static int amount =2000 //账户余额最初为2000public void despoit(int m) //定义存款的方法{amount=amount+mSystem.out.println("晓明存入["+m+"元]")}public void withdraw(int m) //定义取款的方法{amount=amount-mSystem.out.println("张新取走["+m+"元]")if(amount<0)System.out.println("***余额不足!***);public int balance() //定义得到账户余额的方法{return amount}}classicCustomerextendsThread {String nameBankAccount bs //定义一个具体的账户对象public Customer(BankAccount b,String s){name=sbs=b}public static void cus(String name,BankAccount bs) //具体的账户 *** 作方法{if(name.equals("小明")) //判断用户是不是小明{try{for(int i=0i<6i++) //用户晓明则向银行存款6次,每次1000元 {Thread.currentThread().sleep((int)(Math.random()*300))bs.despoit(1000)}}catch(InterruptedException e){}}else{try{for(int i=0i<6i++) //用户不是小明则从银行取款6次,每次1000元{Thread.currentThread().sleep((int)(Math.random()*300))bs.withdraw(1000) }}catch(InterruptedException e){} }}public void run() //定义run方法}cus(name,bs) }}public classAccountTest{public static void main(String [] args) throws InterruptedException{BankAccount bs=new BankAccount()Customer customer1=new Customer(bs,"小明")Customer customer2=new Customer(bs,"张新")Thread t1=new Thread(customer1)Thread t2=new Thread(customer2)t1.Start();t2.start()Thread.currentThread().sleep(500)}}

public class ATM {

public static void main(String[] args) {

// 开立帐号

Account account = new Account()

// 在 account 中存 10,000 元

account.setBalance(10000)

// 检查 account 中的存款

System.out.println("帐户原始金额 : " + account.getBalance() + " 元")

// 小明, 小华与小英一起对 account 进行提款的动作

WithDraw s1 = new WithDraw("小明", account, 5000)// 小明 在 account 中提 5000 元

WithDraw s2 = new WithDraw("小华", account, 2000)// 小华 在 account 中提 2000 元

WithDraw s3 = new WithDraw("小英", account, 4000)// 小英 在 account 中提 4000 元

s1.start()

s2.start()

s3.start()

}

}

//帐户

class Account {

private int balance// 帐户馀额

public int getBalance() { // 取得帐户馀额

return balance

}

public void setBalance(int money) { // 设定帐户馀额

balance = money

}

// 提款方法

public void withDraw(Account account, int withdrawMoney) {

String tName = Thread.currentThread().getName()// tName=提款人

System.out.println(tName + " 开始提款 ... ")

boolean withDrawStatus// 提款状态 说明:false=提款失败, true=提款成功

synchronized(ATM.class) {

int tmpBalabce = account.getBalance()// 取得最新帐户馀额

//用 for-loop 模拟提款时系统所花的时间

for(double delay=0delay<99999999delay++) {

// ... 提款进行中 ...

}

tmpBalabce = tmpBalabce - withdrawMoney// 最新帐户馀额 - 欲提款金额 (用来判断是否馀额足够的依据)

if (tmpBalabce <0) { // 判断是否馀额足够

withDrawStatus = false

System.out.println("....................")

System.out.println(" 帐户馀额不足!")

System.out.println("....................")

} else {

withDrawStatus = true

account.setBalance(tmpBalabce)// 回存account最後剩馀金额

}

}

System.out.println(tName + "的交易单:")

System.out.println("\t欲提款金额:" + withdrawMoney + "元")

System.out.println("\t帐户馀额:" + account.getBalance())

if(withDrawStatus == true){

System.out.println(tName + " 完成提款 ... ")

} else {

System.out.println(tName + " 提款失败 ... ")

}

System.out.println("-------------------------------")

}

}

// 提款类别

class WithDraw extends Thread {

private Account account // 帐号

private int withdrawMoney// 欲提款的金额

// tName:执行绪名称, account:Account物件名称, withdrawMoney:欲提款金额

public WithDraw(String tName, Account account, int withdrawMoney) {

setName(tName)

this.account = account

this.withdrawMoney= withdrawMoney

}

public void run() {

// 执行提款动作(account:帐号, withdrawMoney 欲提款金额)

account.withDraw(account, withdrawMoney)// 执行提款动作

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7858571.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存