查看本章節
查看作業目錄
需求說明:
某用戶共有兩張銀行卡,賬戶名稱相同,但卡號和余額不同,模擬用戶使用這兩張銀行卡進行消費的程序,并列印出消費明細

實作思路:
- 專案中創建賬戶類 Account,類中包括賬戶名稱name、 ThreadLocal 類的參考變數amount,表示存款
- 創建消費類 DailyConsmption實作Runnable 接 口,宣告 賬戶型別的參考 account, 使 用new Random() 實體化一個隨機類物件 random,并定義一個初始化賬戶的構造方法
- 在run方法中呼叫 account 物件的setAmount存款方法,產生亂數表示存款金額,宣告 double 型別的變數 consumptionAmount 和balance,分別表示每次的消費金額和銀行卡余額
- 使用for回圈模擬消費5次,判斷余額是否大于等于 0,如果余額小于 0,則提示用戶余額不足,不夠此次消費,并結束回圈,若余額大于等于 0,則輸出此次的消費明細(包括賬號名稱、執行緒名稱、消費金額和銀行卡余額)
- 創建測驗類,創建兩個執行緒進行測驗
實作代碼:
賬戶類 Account
public class Account {
//賬號名稱
private String name;
//定義一個ThreadLocal型別的變數,該變數將是執行緒的區域變數,用來保存不同銀行卡的存款
private ThreadLocal<Double> amount = new ThreadLocal<>();
//構造方法
public Account() {
super();
}
public Account(String name) {
super();
this.name = name;
}
//通過ThreadLocal類的get()方法回傳執行緒區域變數值
public Double getAmount() {
return amount.get();
}
//通過ThreadLocal類的set()方法設定執行緒區域變數值
public void setAmount(Double amount) {
this.amount.set(amount);;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
消費類 DailyConsmption
import java.util.Random;
public class DailyConsmption implements Runnable {
private Account account;
Random random = new Random();
public DailyConsmption(Account account) {
this.account = account;
}
@Override
public void run() {
//設定銀行卡存款
account.setAmount((double)random.nextInt((2000)+100));
System.out.println(account.getName()+"的"+Thread.currentThread().getName()+"銀行卡,存款"+account.getAmount()+"元");
//宣告消費金額變數 comsumptionAmount
double consumptionAmount = 0.0;
//宣告保存余額的變數
double balance = 0.0;
//模擬賬戶消費5次
for (int i = 0; i < 5; i++) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
//隨機生成一個消費金額
consumptionAmount = random.nextInt(((100)+1));
//消費完成之后的金額
balance = account.getAmount() - consumptionAmount;
if (balance >= 0) {
System.out.println(account.getName()+"的"+Thread.currentThread().getName()+"銀行卡消費了"+account.getAmount()+"元,余額"+balance+"元");
account.setAmount(balance);
} else {
System.out.println(account.getName()+"的"+Thread.currentThread().getName()+"銀行卡余額只剩"+account.getAmount()+"元,不夠支付"+consumptionAmount+"元");
break;
}
}
}
}
測驗類 TestConsmption
public class TestConsmption {
public static void main(String[] args) {
//實體化account物件
Account account = new Account("張三");
//實體化Runnable物件
DailyConsmption consmption = new DailyConsmption(account);
//創建并啟動兩條執行緒
new Thread(consmption,"6222 5555 0022 2200").start();
new Thread(consmption,"6222 5555 8899 1177").start();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/139348.html
標籤:其他
上一篇:求助!!!拜托各位已實習或作業的大佬們幫幫忙[卑微在線求資料]
下一篇:最近校招面試記錄
