Account類:
public class Account {
private String accountNo;
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;
}
private double balance;
public Account(){
}
public Account(String accountNo,double balance){
this.accountNo=accountNo;
this.balance=balance;
}
public int hashCode(){
return accountNo.hashCode();
}
public boolean equals(Object obj){
if(obj !=null && obj.getClass()==Account.class){
Account target =(Account)obj;
return target.getAccountNo().equals(accountNo);
}
return false;
}
/*public synchronized void draw(double drawAmount){
if(balance >=drawAmount){
System.out.println(Thread.currentThread().getName()+"取錢成功,吐出鈔票"+drawAmount);
try {
Thread.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
balance-=drawAmount;
System.out.println("\t餘額爲:"+balance);
}else{
System.out.println(Thread.currentThread().getName()+"取錢失敗!餘額不足!");
}
}
*/
}
public class DrawThread extends Thread{
private Account account;
private double drawAmount;
public double getDrawAmount() {
return drawAmount;
}
public void setDrawAmount(double drawAmount) {
this.drawAmount = drawAmount;
}
public Account getAccount() {
return account;
}
public void setAccount(Account account) {
this.account = account;
}
public DrawThread(String name, Account account, double drawAmount){
super(name);
this.account=account;
this.drawAmount=drawAmount;
}
public void run(){
// synchronized(account){
if(account.getBalance() >=drawAmount){
System.out.println(getName()+"取錢成功,吐出鈔票"+drawAmount);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
account.setBalance(account.getBalance()-drawAmount);
System.out.println("\t餘額爲:"+account.getBalance());
}else{
System.out.println(getName()+"取錢失敗!餘額不足!");
}
}
/*account.draw(drawAmount);*/
// }
}
public class TestDraw {
public static void main(String[] args) {
Account acct= new Account("1234567",1000);
new DrawThread("甲",acct,800).start();
new DrawThread("乙",acct,800).start();
}
}
public synchronized void draw(double drawAmount){
if(balance >=drawAmount){
System.out.println(Thread.currentThread().getName()+"取錢成功,吐出鈔票"+drawAmount);
try {
Thread.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
balance-=drawAmount;
System.out.println("\t餘額爲:"+balance);
}else{
System.out.println(Thread.currentThread().getName()+"取錢失敗!餘額不足!");
}
}
DrawThread中的run方法:public void run(){
account.draw(drawAmount);
}
執行結果: