编写Java程序,使用ThreadLocal类,项目中创建账户类 Account,类中包括账户名称name、 ThreadLocal 类的引用变量amount,表示存款
查看本章节
查看作业目录
需求说明:
某用户共有两张银行卡,账户名称相同,但卡号和余额不同。模拟用户使用这两张银行卡进行消费的过程,并打印出消费明细
实现思路:
- 项目中创建账户类 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;}@Overridepublic void run() {//设置银行卡存款account.setAmount((double)random.nextInt((2000)+100));System.out.println(account.getName()+"的"+Thread.currentThread().getName()+"银行卡,存款"+account.getAmount()+"元");//声明消费金额变量 comsumptionAmountdouble 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,表示存款相关推荐
- 编写Java程序,模拟教练员和运动员出国比赛场景,其中运动员包括乒乓球运动员和篮球运动员。教练员包括乒乓球教练和篮球教练。为了方便出国交流,根乒乓球相关的人员都需要学习英语。
需求说明: 模拟教练员和运动员出国比赛场景,其中运动员包括乒乓球运动员和篮球运动员.教练员包括乒乓球教练和篮球教练.为了方便出国交流,根乒乓球相关的人员都需要学习英语.具体分析如下: (1)共同的属性 ...
- 声明银行账户类 java_编写Java程序,使用ThreadLocal类,项目中创建账户类 Account,类中包括账户名称name、 ThreadLocal 类的引用变量amount,表示存款...
查看本章节 查看作业目录 需求说明: 某用户共有两张银行卡,账户名称相同,但卡号和余额不同.模拟用户使用这两张银行卡进行消费的过程,并打印出消费明细 实现思路: 项目中创建账户类 Account,类中 ...
- 银联银行卡卡号java_编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类...
编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类 编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类,银联借记卡号是一个 19 位的数字,卡号以"62" ...
- java将多个文件写入到一个文件流中再有规律的取出_编写java程序,往一个txt文件里写入学生的基本信息,然后再读出这些信息并打印出来,最后把该文件拷贝到指...
满意答案 azonyb 2014.02.18 采纳率:59% 等级:12 已帮助:13223人 import java.io.BufferedInputStream; import java.i ...
- java shape 空间操作类_设计三个类:几何形状类(Shape)、圆类(Circle)、矩形类(.,请编写 Java程序,设计一个“形状rdquo...
问题标题 设计三个类:几何形状类(Shape).圆类(Circle).矩形类(.,请编写 Java程序,设计一个"形状&rdquo 2019-5-10来自ip:17.175.174. ...
- 编写Java程序,从键盘输入一个正整数n(n≥2),随机生成一个n阶方阵,每个元素均为整数,其取值范围为[100,999]。然后输出该方阵元素中的最大值和最小值。
编写Java程序,从键盘输入一个正整数n(n≥2),随机生成一个n阶方阵,每个元素均为整数,其取值范围为[100,999].然后输出该方阵元素中的最大值和最小值. ```java package Ja ...
- 编写Java程序时的一些经验总结
平时编写Java程序的一些经验总结 本文仅仅用来个人的学习总结,如果有重复,请多多谅解: 1.方法前或其他适当位置添加多行注释 在适当的位置添加注释可以让我们的程序变得更易读,尤其是在编写一些比较复杂 ...
- eclipse怎么编写java程序_简单使用Eclipse编写第一个Java程序
文章作者:姜南(Slyar)文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作. Eclipse是很常用的Java IDE,至少我们学校教Java都是用这个.下载就不 ...
- 编写运行最简单的java程序——使用记事本编写java程序
编写运行最简单的java程序--使用记事本编写java程序 第一个java程序--使用记事本编辑 经过上篇文章的java环境搭建成功的小伙伴们可以在自己的计算机上编写属于自己的java程序了yo~ 还 ...
最新文章
- Dev 控件中的combox禁止输入
- mysql总结 博客园_mysql总结
- 自学Python十二 战斗吧Scrapy!
- python编程语言是什么-Python是一种什么样的编程语言?解释?编译?汇编?机械?...
- const和readonly
- Snackbar-Android M新控件
- GM6 pageset - Cache get scenario /ui2/cl_pfcg_utils
- Wtm携手LayUI -- .netcore 开源生态我们是认真的!
- 算法设计与分析——递归与分治策略——全排列
- Python之网络爬虫(Xpath语法、Scrapy框架的认识)
- 出现问题protected:void __thiscall CTalkCDlg::OnIdok(void)(?OnIdok@CTalkDlg@@IAEXXZ)?
- 病毒注册表常用目标Svchost和Explorer
- Atitit.图片木马的原理与防范 attilax 总结
- 医学英文文献怎么找?
- github帐户和仓库的创建
- Python学习笔记——函数式方程
- 腾讯移动版图,社交之外还有什么?
- PDF文件的旋转和保存
- plt.title 设置标题或标注和图片之间的距离
- 软件推荐 Vstart和EssentialPIM