文档介绍:资源下载地址: http://download./detail/cloudyxuq/3763101 : (用户登录那些省略) Accout 类: [java] view plain copy ?/** 银行取钱,账户类*/ ? public class Accout { ?// 账户编号? private String accoutNo; ?// 账户余额? private double balance; ?// 账户名称? private String accoutName; ? public Accout(){ ?? super (); ??} ?? public Accout(String accoutNo,String accoutName, double balance) { ?? super (); ?? this .accoutNo = accoutNo; ?? this .balance = balance; ?? this .accoutName=accoutName; ??} ?? public String outNo() { ?? return accoutNo; ??} ?? public void outNo(String accoutNo) { ?? this .accoutNo = accoutNo; ??} ?? public double getBalance() { ?? return balance; ??} ?? public void setBalance( double balance) { ?? this .balance = balance; ??} ?? public String outName() { ?? return accoutName; ??} ?? public void outName(String accoutName) { ?? this .accoutName = accoutName; ??} ??// 根据 accoutNohe 来计算 Accout 的 hashcode 和判断 equals ??***@Override ?? public int hashCode() { ?? return (); ??} ??***@Override ?? public boolean equals(Object obj) { ?? if (obj!= null &&()==Accout. class ){ ?? Accout target=(Accout)obj; ?? return ().equals(accoutNo); ??} ?? return false ; ??} ??} DrawThread 类: [java] view plain copy ??/** 取钱的线程类*/ ?? public class DrawThread implements Runnable{ ??// 模拟用户账户?? private Accout accout; ??// 当前取钱线程所希望取得值?? private double drawAmount; ?? public DrawThread(Accout accout, double drawAmount) { ?? super (); ?? this .accout = accout; ?? this .drawAmount = drawAmount; ??} ??// 如果多个线程修改同一个共享数据时,会发生数据安全问题?? public void run() { ??// 账户余额大于取款金额时?? if (()>=drawAmount){ ??// 取款成功?? (().getName()+()+ " 取款成功:吐出钞票: " +drawAmount); ??// 修改余额?? (()-drawAmount); ?? ( "当前余额为: " +()); ??} ??// 账户金额不够时?? else { ?? ( "账户金额不够,您的余额只有" +()); ??} ??} ??} TestDraw 测试类: [java] view plain copy ?? p