查看本章节

查看作业目录


需求说明:

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

实现思路:

  1. 项目中创建账户类 Account,类中包括账户名称name、 ThreadLocal 类的引用变量amount,表示存款
  2. 创建消费类 DailyConsmption实现Runnable 接 口。声明 账户类型的引用 account, 使 用new Random() 实例化一个随机类对象 random,并定义一个初始化账户的构造方法
  3. 在run方法中调用 account 对象的setAmount存款方法,产生随机数表示存款金额,声明 double 类型的变量 consumptionAmount 和balance,分别表示每次的消费金额和银行卡余额
  4. 使用for循环模拟消费5次,判断余额是否大于等于 0,如果余额小于 0,则提示用户余额不足,不够此次消费,并结束循环。若余额大于等于 0,则输出此次的消费明细(包括账号名称、线程名称、消费金额和银行卡余额)
  5. 创建测试类,创建两个线程进行测试

实现代码:

账户类 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();
} }

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

  1. 编写Java程序,模拟教练员和运动员出国比赛场景,其中运动员包括乒乓球运动员和篮球运动员。教练员包括乒乓球教练和篮球教练。为了方便出国交流,根乒乓球相关的人员都需要学习英语。

    需求说明: 模拟教练员和运动员出国比赛场景,其中运动员包括乒乓球运动员和篮球运动员.教练员包括乒乓球教练和篮球教练.为了方便出国交流,根乒乓球相关的人员都需要学习英语.具体分析如下: (1)共同的属性 ...

  2. 编写Java程序,读取文本文档的内容,去除文本中包含的“广告”字样,把更改后的内容保存到一个新的文本文档中

    查看本章节 查看作业目录 需求说明: 读取文本文档的内容,去除文本中包含的"广告"字样,把更改后的内容保存到一个新的文本文档中 实现思路: 在main() 方法中,使用 new F ...

  3. 35.按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n); (2)编写一个类:ClassA来实现接口InterfaceA,实现int method(int n)接口方 法时,要求计算1到n的和; (3)编写另一个类:ClassB来实现接口InterfaceA,实现int method(int n)接口 方法时,要求计算n的阶乘(n

      35.按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n): (2)编写一个类:ClassA来实现接口InterfaceA,实现in ...

  4. Java初学者作业——编写 Java 程序,定义 Employee 类以及 HR 类,实现 HR 为 Employee 加薪的功能。

    返回本章节 返回作业目录 需求说明: 编写 Java 程序,定义 Employee 类以及 HR 类,实现 HR 为 Employee 加薪的功能. 实现思路: 定义 Employee 类,并定义属性 ...

  5. Java初学者作业——编写 Java 程序,定义 Java 类 (Point) 用来表示坐标,坐标范围在(0,0)到(100,100)以内,并显示合法的坐标在控制台。

    返回本章节 返回作业目录 需求说明: 编写 Java 程序,定义 Java 类 Point 用来表示坐标,坐标范围在(0,0)到(100,100)以内,并显示合法的坐标在控制台. 实现思路: 定义 P ...

  6. 初学编写JAVA程序

    一.编写JAVA程序 编写JAVA程序,输出一行文本信息:“Hello world”,选择编辑器eclipse,打开之后编写程序 public class Hello{ public static v ...

  7. Java初学者作业——编写 Java 程序,用户输入 3 个操作数,分别求出最大值、最小值和平均值。

    返回本章节 返回作业目录 需求说明: 编写 Java 程序,用户输入 3 个操作数,分别求出最大值.最小值和平均值. 实现思路: 定义 Java 类,定义 3 个方法,用来求 3 个数字的最大值.最小 ...

  8. 编写Java程序,用户在网上购买商品(good),当用户买了一本书(book)、一顶帽子(hat)或者买了一双鞋子(shoe),卖家就会通过物流将商品邮寄给用户,使用简单工厂模式模拟这一过程。

    查看本章节 查看作业目录 需求说明: 编写Java程序,用户在网上购买商品(good),当用户买了一本书(book).一顶帽子(hat)或者买了一双鞋子(shoe),卖家就会通过物流将商品邮寄给用户, ...

  9. Java初学者作业——编写JAVA程序,计算跳水运动员本次动作的最终得分。

    返回本章节 返回作业目录 需求说明: 编写JAVA程序,计算跳水运动员本次动作的最终得分. 规则如下: 在跳水比赛中,共有六位裁判对运动员所完成的动作进行评分,每位裁判的评分在0-10之间,运动员最终 ...

随机推荐

  1. Docker学习(二)——Docker容器使用

    Docker容器使用 1.Docker客户端       命令docker可以查看到Docker客户端的所有命令选项.       命令docker command --help更深入的了解指定的Do ...

  2. Maven配置大全

    maven项目打jar包(带依赖) <build> <plugins> <plugin> <artifactId>maven-assembly-plug ...

  3. Jenkins制品管理

    目录 一.简介 二.Jenkins管理制品 三.Nexus maven上传 jenkins上传 管理Docker镜像 管理raw 四.拷贝制品 五.版本号 Version Number 一.简介 制品 ...

  4. [BUUCTF]PWN21——ciscn_2019_s_3

    [BUUCTF]PWN21--ciscn_2019_s_3 附件 步骤 例行检查,64位,开启了NX保护 试运行的时候回显是一些乱码,直接用ida打开,从main函数开始看 main函数调用了vuln ...

  5. MISC常见题型整理

    题目打包在这里 提取码:fhkb MISC 流量包分析 流量包_1 流量包_2 流量包_3 图片隐写 图片隐写_1 图片隐写_2 图片隐写_3 图片隐写_4 图片隐写_5 图片隐写_6 音频隐写 音频 ...

  6. 2021 中国.NET开发者峰会 今日开幕

    01 大会介绍 .NET Conf China 2021 是面向开发人员的社区峰会,基于 .NET Conf 2021的活动,庆祝 .NET 6 的发布和回顾过去一年来 .NET 在中国的发展成果展示 ...

  7. 成本计算?(Project)

    <Project2016 企业项目管理实践>张会斌 董方好 编著 成本各种输入以后就该计算了是吗? 其实,计算有我什么事啊,不都是些四则运算吗?Project要是连这都搞不定,他还在地球上 ...

  8. .net core使用EF core连接mssqlserver数据库

    一,打开控制台二,输入以下代码1.Install-Package Microsoft.EntityFrameworkCore 2.Install-Package Microsoft.EntityFra ...

  9. 我的邮箱客户端程序Popmail

    05年的时候写了一个邮箱客户端程序.当时主要目的是研究POP3和SMTP协议,同时锻炼自己的网络编程能力.当然了,如果自己写的邮箱客户端能够满足自身的日常工作需要,而不是频繁的登录不同的网页邮箱,那就 ...

  10. 原生XMLHTTPResponse,jQuery-Ajax 上传文件;iframe上传图片&预览;图片验证码小案例

    原生AJAX Ajax主要就是使用 [XmlHttpRequest]对象来完成请求的操作,该对象在主流浏览器中均存在(除早起的IE),Ajax首次出现IE5.5中存在(ActiveX控件) 1.Xml ...