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

简介: 编写Java程序,使用ThreadLocal类,项目中创建账户类 Account,类中包括账户名称name、 ThreadLocal 类的引用变量amount,表示存款

需求说明:


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


25.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<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();
  }
}



相关文章
|
6月前
|
人工智能 监控 安全
智慧工地解决方案,java智慧工地程序代码
智慧工地系统融合物联网、AI、大数据等技术,实现对施工现场“人、机、料、法、环”的全面智能监控与管理,提升安全、效率与决策水平。
207 2
|
4月前
|
安全 Java
Java异常处理:程序世界的“交通规则
Java异常处理:程序世界的“交通规则
357 98
|
11月前
|
存储 Java
# 【Java全栈学习笔记-U1-day02】变量+数据类型+运算符
本篇笔记主要围绕Java全栈学习的第二天内容展开,涵盖了变量、数据类型、运算符以及Scanner类的应用。首先介绍了变量的概念与命名规范,以及如何定义和使用变量;接着详细讲解了Java中的基本数据类型,包括整型、浮点型、字符型、布尔型等,并通过实例演示了数据类型的运用。随后,深入探讨了各类运算符(赋值、算术、关系、逻辑)及其优先级,帮助理解表达式的构成。最后,介绍了如何利用Scanner类实现用户输入功能,并通过多个综合示例(如计算圆面积、购物打折、变量交换及银行利息计算)巩固所学知识。完成相关作业将进一步加深对这些基础概念的理解与实践能力。
221 13
|
5月前
|
存储 Java 编译器
对比Java学习Go——程序结构与变量
本节对比了Java与Go语言的基础结构,包括“Hello, World!”程序、代码组织方式、入口函数定义、基本数据类型及变量声明方式。Java强调严格的面向对象结构,所有代码需置于类中,入口方法需严格符合`public static void main(String[] args)`格式;而Go语言结构更简洁,使用包和函数组织代码,入口函数为`func main()`。两种语言在变量声明、常量定义、类型系统等方面也存在显著差异,体现了各自的设计哲学。
|
11月前
|
存储 Java 数据库连接
【YashanDB知识库】Java程序调用存储过程,在提取clob时报YAS-00004
【YashanDB知识库】Java程序调用存储过程,在提取clob时报YAS-00004
|
11月前
|
存储 传感器 缓存
java变量与数据类型:整型、浮点型与字符类型
### Java数据类型全景表简介 本文详细介绍了Java的基本数据类型和引用数据类型,涵盖每种类型的存储空间、默认值、取值范围及使用场景。特别强调了`byte`、`int`、`long`、`float`、`double`等基本类型在不同应用场景中的选择与优化,如文件流处理、金融计算等。引用数据类型部分则解析了`String`、数组、类对象、接口和枚举的内存分配机制。
429 15
|
存储 Java
Java变量、数据类型和运算符 2
Java变量、数据类型和运算符
194 0
|
存储 Java
02 Java基础语法(变量+数据类型+运算符)(下)
02 Java基础语法(变量+数据类型+运算符)
130 5
|
存储 Java
02 Java基础语法(变量+数据类型+运算符)(上)
02 Java基础语法(变量+数据类型+运算符)
151 4