目的:
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();