Account.java
public class Account {
//封装账户编号,账户余额的两个成员变量
private String accountNo;
private double balance;
public Account(){}
//构造器
public Account(String accountNo,double balance){
this.accountNo = accountNo;
this.balance = balance;
}
public String getAccountNo() {
return accountNo;
}
public void setAccountNo(String accountNo) {
this.accountNo = accountNo;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
// @Override
// public boolean equals(Object o) {
// if (this == o) return true;
// if (o == null || getClass() != o.getClass()) return false;
// Account account = (Account) o;
// return accountNo.equals(account.accountNo);
// }
//
// @Override
// public int hashCode() {
// return Objects.hash(accountNo);
// }
}
DrawThread.java
- 重点就是符合:加锁,修改,释放锁的逻辑
- 使用account作为同步监视器
public class DrawThread extends Thread{
//模拟用户账户
private Account account;
//希望取钱的数额
private double drawAmount;
public DrawThread(String name,Account account,double drawAmount){
super(name);
this.account=account;
this.drawAmount= drawAmount;
}
public void run(){
//使用account作为同步监视器,任何线程进入同步代码块之前必须先获得对account账户的锁定
//加锁,修改,释放锁
synchronized(account) {
if (account.getBalance() >= drawAmount) {
//账户余额大于取钱数目
System.out.println(getName() + "取钱成功!吐出钞票:" + drawAmount);
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
//修改余额
account.setBalance(account.getBalance() - drawAmount);
System.out.println("\t余额为:" + account.getBalance());
} else {
System.out.println(getName() + "取钱失败!余额不足!");
}
}
//同步代码块结束前,该线程释放同步锁
}
}
DrawTest.java
public class DrawTest {
public static void main(String [] args){
//创建一个账户
Account acct = new Account("123456",1000);
//模拟俩线程对一个账户取钱
new DrawThread("甲",acct,800).start();
new DrawThread("乙",acct,800).start();
}
}
//结果如下:
甲取钱成功!吐出钞票:800.0
余额为:200.0
乙取钱失败!余额不足!
多次运行,总可以看见上面的正确结果,成功!!!
今日推歌
—《年轮说》杨丞琳
一是婴儿哭啼 二是学游戏
三是青春物语 四是碰巧遇见你
了解这个你 沉迷这个你
时间暂停 再继续
十是寂寞夜里 百是怀了疑
千是挣扎梦醒 万是铁心离开你
经历这个你
活成这个我 细数自己
还有种版本的歌词解读觉得很有意思:
一是(伊始)婴儿哭啼
二是(儿时)学游戏
三是(散是)青春物语
四是(适时)碰巧遇见你
十是(失是)寂寞夜里
百是(败是)怀了疑
千是(堑是)挣扎梦醒
万是(忘是)铁心离开你
最近发现这歌貌似不用花18元就可以听了哈哈!!!