1. 程式人生 > >java的同步三種方式--銀行取錢問題

java的同步三種方式--銀行取錢問題

第二種方式的例子:
class Account1 {
private double balance ;
public Account1(double balance )
{
super();
this.balance = balance ;
}
public double getBalance()
{
return balance;
}
 
public void setBalance(double balance)
{
this.balance = balance;
}
 
//              同步方法
//      取錢
/**
* 同步方法的同步監聽器物件:   若該方法是非靜態的那麼就是this
* 若方法是靜態那麼就是同步方法所在類的  Class clz  =  Account2.class;(一份位元組碼)
*/
public synchronized void draw(double drawMoney )
{
//能取錢的操作函式
if(balance >= drawMoney)
{
//取出多少錢
System.out.println(Thread.currentThread().getName()+
"取出多少錢"+drawMoney);
try {
Thread.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//設定賬戶餘額還有多少
setBalance(balance - drawMoney);
//           餘額還有多少 
System.out.println(Thread.currentThread().getName()+
"賬戶的餘額是:"+getBalance());
}
else{
System.out.println(Thread.currentThread().getName()+
"賬戶餘額不足,餘額為:"+getBalance());
}
}
 }
 class  ATM1 implements Runnable{
//      取得錢數 
private double drawMoney;
private Account1 a;
public ATM1(double drawMoney, Account1 a)
{
this.drawMoney = drawMoney;
this.a = a;
}
public void run()
{
 
a.draw(drawMoney);
}
 }
 
public class synchronizedThread {
public static void main(String [] args)
{
Account1 a = new Account1(1000);
ATM1 atm = new ATM1 (800,a);
//對於相同的賬戶,不同的人去取錢
new Thread(atm, "AA").start();
new Thread(atm, "BB").start();
new Thread(atm, "CC").start();
}

}