package cn.thread;
/**
* @Title: yoyogaosong
* @Description:
* @author: YOYO
* @Date: 2018-12-06 上午 10:11
* @Version: 1.0.0
*/
public class Account {
private String accountNo ;
private double balance ;
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;
if (Double.compare(account.balance, balance) != 0) return false;
return accountNo != null ? accountNo.equals(account.accountNo) : account.accountNo == null;
}
@Override
public int hashCode() {
int result;
long temp;
result = accountNo != null ? accountNo.hashCode() : 0;
temp = Double.doubleToLongBits(balance);
result = 31 * result + (int) (temp ^ (temp >>> 32));
return result;
}
}
package cn.thread;
/**
* @Title: yoyogaosong
* @Description:
* @author: YOYO
* @Date: 2018-12-06 下午 03:11
* @Version: 1.0.0
*/
public class Account2 {
private String accountNo ;
private double balance ;
public Account2(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 synchronized void draw(double drawAccount){
if (balance >= drawAccount){
System.out.println(Thread.currentThread().getName()
+" 取钱成功,吐出钞票:"+drawAccount+" 余额为:"+(balance-drawAccount));
balance -= drawAccount ;
}else{
System.out.println(Thread.currentThread().getName()+" 取钱失败!余额为:"+balance);
}
}
public synchronized void save(double saveAccount){
balance += saveAccount ;
System.out.println(Thread.currentThread().getName()+" 存钱成功!存进钞票:"+saveAccount +" 余额为:"+balance);
}
}
package cn.thread;
/**
* @Title: yoyogaosong
* @Description:
* @author: YOYO
* @Date: 2018-12-06 上午 11:22
* @Version: 1.0.0
*/
public class SaveThread extends Thread {
//模拟用户账户
private Account account;
//当前存钱线程希望存的钱数
private double saveAccount;
public SaveThread(String name, Account account, double saveAccount){
super(name);
this.account = account;
this.saveAccount = saveAccount;
}
public void run() {
synchronized (account) {
account.setBalance(account.getBalance() + saveAccount);
System.out.println(getName() + " 存钱成功!存进钞票:"
+ saveAccount+" 余额为:" + account.getBalance());
}
}
}
package cn.thread;
/**
* @Title: yoyogaosong
* @Description:
* @author: YOYO
* @Date: 2018-12-06 上午 10:13
* @Version: 1.0.0
*/
public class DrawThread extends Thread {
//模拟用户账户
private Account account ;
//当前取钱线程希望取的钱数
private double drawAccount ;
public DrawThread(String name ,Account account ,double drawAccount){
super(name);
this.account = account;
this.drawAccount = drawAccount;
}
public void run() {
synchronized (account) {
if (account.getBalance() >= drawAccount) {
account.setBalance(account.getBalance() - drawAccount);
System.out.println(getName() + " 取钱成功!吐出钞票:" + drawAccount+" 余额为:" + account.getBalance());
} else {
System.out.println(getName() + " 取钱失败!余额为:"+account.getBalance());
}
}
}
}
package cn.thread;
public class Bank {
public static void main(String[] args) {
// 卡号
Account account = new Account("VIP88888888", 0);
System.out.println("卡号: "+account.getAccountNo()+" 总资产: "+account.getBalance());
DrawThread drawThread1 = new DrawThread("李四", account, 200);
DrawThread drawThread2 = new DrawThread("王五", account, 400);
SaveThread saveThread1 = new SaveThread("老高", account, 300);
for (int i = 0; i < 5; i++) {
new Thread(drawThread1).start();
new Thread(drawThread2).start();
new Thread(saveThread1).start();
}
}
}