文档详情

Java多线程(全)学习笔记(中).doc

发布:2017-04-03约1.96万字共22页下载文档
文本预览下载声明
资源下载地址:/detail/cloudyxuq/3763101 四.多线程的同步 以一个取钱列子来分析:(用户登录那些省略) Accout类: [java] view plaincopy /**银行取钱,账户类*/ 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 getAccoutNo() { return accoutNo; } public void setAccoutNo(String accoutNo) { this.accoutNo = accoutNo; } public double getBalance() { return balance; } public void setBalance(double balance) { this.balance = balance; } public String getAccoutName() { return accoutName; } public void setAccoutName(String accoutName) { this.accoutName = accoutName; } //根据accoutNohe来计算Accout的hashcode和判断equals @Override public int hashCode() { return accoutNo.hashCode(); } @Override public boolean equals(Object obj) { if(obj!=nullobj.getClass()==Accout.class){ Accout target=(Accout)obj; return target.getAccoutNo().equals(accoutNo); } return false; } } DrawThread类: [java] view plaincopy /**取钱的线程类*/ 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(accout.getBalance()=drawAmount){ //取款成功 System.out.println(Thread.currentThread().getName()+accout.getAccoutName()+取款成功:吐出钞票:+drawAmount); //修改余额 accout.setBalance(accout.getBalance()-drawAmount); System.out.println(当前余额为:+accout.getBalance()); } //账户金额不够时 else{ System.out.println(账户金额不够,您的余额只有+accout.getBalance()); } } } TestDraw测试类: [java] view plaincopy public class TestDraw { public static void main(String[]args) throws
显示全部
相似文档