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

實作思路:
- 專案中創建賬戶類 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/houduan/143220.html
標籤:Java
上一篇:go語言摘記
