目的:
1、学会分析“银行存款程序”的实现思路。
2、根据思路独立完成“银行存款程序”的源代码编写、编译及运行。
3、通过存款程序理解多线程安全问题的发生原因,并掌握如何解决多线程安全问题。
要求:
编写一个模拟银行存款的程序。假设有两个储户都去银行往同一个账户存款,一次存100,每人存3次。要求储户每存一次钱,账·户余额增加100元,并在控制台输出当前账户的余额。
二、实验原理(图):
1、通过任务描述可以看出,该任务需要使用多线程相关知识来实现。由于两个储户同时操作一个账户,因此需要创建两个线程来完成存款操作。由于此处账户为共享数据,所以需要使用实现Runnable接口的方式来创建线程,而不是继承Thread类。
2、既然是储户去银行存款,那么可以得出该任务会涉及到3个类,分别是银行类、储户类和测试类。
3、在银行类中需要定义一个账户余额的变量和一个存款的方法,储户类是任务类,需要实现Runnable接口,并在类中覆写run()方法,通过循环3次调用银行类中的存款方法,来实现往同一个账户存款3次的操作。
4、为了避免每一次存款过程中账户的余额增加时可能出现的不正常情况,也就是避免多线程并发问题,需要在特定的位置上使用同步代码块并指定一个锁,该锁可以是任意的对象,此处使用this关键字,即可解决多线程安全问题。

public class Bank {static String bankname;// 定义静态变量存储银行名称private String name;// 账户姓名private String password;// 密码private double balance;// 账户余额private double turnover;// 交易额// 静态方法,打印出银行欢迎语句static void welcome() {System.out.println("欢迎来到" + bankname + "---------");   }// 构造方法,开户public Bank(String name, String password, double turnover) {// 将变量赋值给成员变量super();this.name = name;this.password = password;this.turnover = turnover;this.balance = turnover - 10; }// 存款public  synchronized void deposit(double turnover) {balance = balance + turnover;System.out.println(name + "您好,您的账户 已存入" + turnover + "元," + "当前余额" + balance + "元");}// 取款public synchronized void withdrawal(String password, double turnover) {// 根据传入的变量与成员变量进行比较,判断密码是否正确if (this.password != password) {System.out.println("您输入的密码错误!");return;}// 判断余额是否充足if (balance - turnover > 0) {balance = balance - turnover;System.out.println(name + "您好,您的账户 已取出" + turnover + "元," + "当前余额" + balance + "元");} else {System.out.println("对不起,账户余额不足!");}}// 静态方法,打印出银行欢迎下次光临的语句static void welcomeNext() {System.out.println("请携带好随身物品,欢迎下次光临" + bankname + "---------");}}//创建一个存钱类SaveMoney去实现接口Runnable:
class SaveMoney implements Runnable{private Bank bank;  public SaveMoney(Bank bank) {super();this.bank = bank;         }public void run() {bank.deposit(500);//每次存入500元}}//创建一个取钱类FetMoney去实现接口Runnable:
class GetMoney implements Runnable{private Bank bank;
public GetMoney(Bank bank) {super();this.bank = bank;      }public void run() {bank.withdrawal("654321",200);//每次取200元   }}//创建一个测试类去输入数据测试程序:
package 第八次聊天程序设计;
import java.util.Scanner;
public class Test {public static void main(String[] args) {// 开卡的时候默认存入100元,卡费10元Bank bank = new Bank("王光辉先生", "654321", 100); bank.bankname = "招商银行";bank.welcome();        // 模拟5次客户的存取款过程,线程调度是随机的,也就是不确定下一次客户是存款还是取款Thread t1, t2;for (int i = 1; i <= 5; i++) {SaveMoney s1 = new SaveMoney(bank);t1 = new Thread(s1);t1.start(); // 启动存钱线程GetMoney s2 = new GetMoney(bank);t2 = new Thread(s2);t2.start();// 启动取钱线程}  }}

java银行存款程序设计相关推荐

  1. 四川大学java试题_四川大学2013年计算机(软件)学院Java语言程序设计期末考试试题B卷...

    四川大学期末考试试题(闭卷) (2013 -2014学年第1学期) 课程号:课程名称: Java语言程序设计(B 卷)任课教师: 适用专业年级:学号:姓名: 一.单项选择题(本大题共20小题,每小题2 ...

  2. java语言程序设计期末复习综合练习题_Java语言程序设计期末复习综合练习题答案...

    Java语言程序设计期末复习综合练习题 一.选择题. 2. main方法是Java Application程序执行的入口点,关于main方法的方法头以下哪项是合法的( )? A.public stat ...

  3. 2018年10月自考java_请注意!2018年自考《Java语言程序设计(一)》课程全国统一命题考试...

    为组织好高等教育自学考试<Java语言程序设计(一)>课程的全国统一考试命题工作,根据全国统一命题课程的有关规定,特制定本说明. 一.考试原则 1.考试标准 本课程考试参照全日制普通高校同 ...

  4. 20155328 《Java程序设计》 实验二(Java面向对象程序设计) 实验报告

    20155328 <Java程序设计> 实验二(Java面向对象程序设计) 实验报告 单元测试 一.单元测试和TDD 编程时需理清思路,将编程需求等想好,再开始编.此部分可用伪代码实现. ...

  5. java语言程序设计考点_计算机二级考试Java语言程序设计考点:关键字

    大家回忆一下我们在学习汉语的时候,开始学的是什么?肯定是先学一些单个的字,只有认识了单个的字,然后才能组成词,然后才能慢慢的到句子,然后到文章.学习同计算机交流跟这个过程是一样的,首先我们得学习一些计 ...

  6. 2012年1月java_全国2012年1月自考Java语言程序设计(一)试题及答案.doc

    全国2012年1月自考Java语言程序设计(一)试题及答案 全国2012年10月自考Java语言程序设计(一)试题 课程代码:04747 选择题部分 一.单项选择题 本大题共10小题,每小题1分,共1 ...

  7. java程序设计试题_《Java语言程序设计》期末考试模拟试题——填空题和编程题...

    一.根据题意,填写出空格中的内容 Java平台包括三个技术方向,其中J2ME代表____________.J2SE代表___________.J2EE代表____________.2.面向对象的四大概 ...

  8. java面向对象程序设计第三版_JAVA面向对象程序设计之创建型设计模式

    [本文详细介绍了JAVA面向对象程序设计中的创建型设计模式,欢迎读者朋友们阅读.转发和收藏!] 1 基本概念 1.1 什么是设计模式 设计模式( Design pattern )是一套被反复使用.多数 ...

  9. Java语言程序设计实验指导_《java语言程序设计》上机实验指导手册(4).doc

    <java语言程序设计>上机实验指导手册(4).doc 1JAVA语言程序设计上机实验指导手册(4)2实验四JAVA面向对象编程1[目的]①通过编程和上机实验理解JAVA语言是如何体现面向 ...

最新文章

  1. 【深度学习笔记】Windows 下 pip 安装paddle.fluid
  2. C++面向对象模型初探
  3. java事件大全_Java sctipt常用事件汇总介绍
  4. [Tyvj1114 搭建双塔]
  5. Android Studio目录结构分析
  6. Nim游戏(初谈博弈)
  7. 用Python盘点那些豆瓣评分低于3.0的奇葩电影
  8. mysql访问被拒绝1045_mysqlimport:错误:1045,访问被拒绝
  9. 如何打造一款火遍国内外的自走棋手游?我们跟《战歌竞技场》的美术和程序聊了聊
  10. android 根据宽度调整字体大小,android根据分辨率自动调整字体大小的实例代码
  11. C语言求CHO的相对分子质量
  12. gateway-使用
  13. Texlive和TeXStudio的下载安装
  14. 如何将json类型的数据转换成csv格式
  15. python爬虫之b站视频下载(python学习笔记)
  16. 山东小学信息技术课本 python 五年级_山东教育出版社小学信息技术电子课本
  17. JavaGUI设计-计算器
  18. java 基于注解实现动态级联下拉excel模板
  19. Linux环境下制作启动U盘
  20. DZ论坛的几个使用技巧

热门文章

  1. 软件行业的最后十年【ChatGPT】
  2. NRF52832学习笔记(33)——低功耗实现
  3. 固体微电子学与半导体物理学(四)
  4. [转]电荷泵/charge pump的原理介绍
  5. Nginx高级课程扩容与高效
  6. Linux VPS服务器根据CPU负载及内存占用自动重启的bash shell脚本
  7. 嵌入式 -嵌入式手册分类及简介
  8. 路由器原理及路由协议
  9. Android 使用ActivityGroup来切换Activity和Layout
  10. tkinter tkinter 制作屏保制作屏保