声明银行账户类 java_编写Java程序,使用ThreadLocal类,项目中创建账户类 Account,类中包括账户名称name、 ThreadLocal 类的引用变量amount,表示存款...

查看本章节

查看作业目录

需求说明:

某用户共有两张银行卡,账户名称相同,但卡号和余额不同。模拟用户使用这两张银行卡进行消费的过程,并打印出消费明细

d4e375ed01a256ff573064c7933c0817.png

实现思路:

项目中创建账户类 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 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();

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值