查看本章节

查看作业目录


需求说明:

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

实现思路:

  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;}@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,表示存款相关推荐

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

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

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

    查看本章节 查看作业目录 需求说明: 某用户共有两张银行卡,账户名称相同,但卡号和余额不同.模拟用户使用这两张银行卡进行消费的过程,并打印出消费明细 实现思路: 项目中创建账户类 Account,类中 ...

  3. 银联银行卡卡号java_编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类...

    编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类 编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类,银联借记卡号是一个 19 位的数字,卡号以"62" ...

  4. java将多个文件写入到一个文件流中再有规律的取出_编写java程序,往一个txt文件里写入学生的基本信息,然后再读出这些信息并打印出来,最后把该文件拷贝到指...

    满意答案 azonyb 2014.02.18 采纳率:59%    等级:12 已帮助:13223人 import java.io.BufferedInputStream; import java.i ...

  5. java shape 空间操作类_设计三个类:几何形状类(Shape)、圆类(Circle)、矩形类(.,请编写 Java程序,设计一个“形状rdquo...

    问题标题 设计三个类:几何形状类(Shape).圆类(Circle).矩形类(.,请编写 Java程序,设计一个"形状&rdquo 2019-5-10来自ip:17.175.174. ...

  6. 编写Java程序,从键盘输入一个正整数n(n≥2),随机生成一个n阶方阵,每个元素均为整数,其取值范围为[100,999]。然后输出该方阵元素中的最大值和最小值。

    编写Java程序,从键盘输入一个正整数n(n≥2),随机生成一个n阶方阵,每个元素均为整数,其取值范围为[100,999].然后输出该方阵元素中的最大值和最小值. ```java package Ja ...

  7. 编写Java程序时的一些经验总结

    平时编写Java程序的一些经验总结 本文仅仅用来个人的学习总结,如果有重复,请多多谅解: 1.方法前或其他适当位置添加多行注释 在适当的位置添加注释可以让我们的程序变得更易读,尤其是在编写一些比较复杂 ...

  8. eclipse怎么编写java程序_简单使用Eclipse编写第一个Java程序

    文章作者:姜南(Slyar)文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作. Eclipse是很常用的Java IDE,至少我们学校教Java都是用这个.下载就不 ...

  9. 编写运行最简单的java程序——使用记事本编写java程序

    编写运行最简单的java程序--使用记事本编写java程序 第一个java程序--使用记事本编辑 经过上篇文章的java环境搭建成功的小伙伴们可以在自己的计算机上编写属于自己的java程序了yo~ 还 ...

最新文章

  1. Dev 控件中的combox禁止输入
  2. mysql总结 博客园_mysql总结
  3. 自学Python十二 战斗吧Scrapy!
  4. python编程语言是什么-Python是一种什么样的编程语言?解释?编译?汇编?机械?...
  5. const和readonly
  6. Snackbar-Android M新控件
  7. GM6 pageset - Cache get scenario /ui2/cl_pfcg_utils
  8. Wtm携手LayUI -- .netcore 开源生态我们是认真的!
  9. 算法设计与分析——递归与分治策略——全排列
  10. Python之网络爬虫(Xpath语法、Scrapy框架的认识)
  11. 出现问题protected:void __thiscall CTalkCDlg::OnIdok(void)(?OnIdok@CTalkDlg@@IAEXXZ)?
  12. 病毒注册表常用目标Svchost和Explorer
  13. Atitit.图片木马的原理与防范 attilax 总结
  14. 医学英文文献怎么找?
  15. github帐户和仓库的创建
  16. Python学习笔记——函数式方程
  17. 腾讯移动版图,社交之外还有什么?
  18. PDF文件的旋转和保存
  19. plt.title 设置标题或标注和图片之间的距离
  20. 软件推荐 Vstart和EssentialPIM

热门文章

  1. 卧槽!终于知道涛哥我为啥赚不到钱了
  2. Java ByteBuffer用法
  3. Modelsim SE-64 10.4建立UVM环境
  4. 如何同时登陆局域网和互联网?
  5. Win7 64位下Kindle4、闪迪Cruzer BladeU盘等无法安装驱动问题的解决方法
  6. FDC2214/2114使用说明及资料分享
  7. mathtype部分功能不可用
  8. 极大似然估计原理详解
  9. 『进出口贸易』 [经验交流]外贸朋友们一定进来看看,关于贸易成本核算问题(做人要厚道)
  10. 三七互娱后端工程师笔试记录