1 public class SynchronizedClass extends Thread{ 2 private Account account; 3 private double drawbalance; 4 Object obj; 5 public SynchronizedClass(String name,Account account,double drawbalance,Object obj){ 6 super(name); 7 this.account=account; 8 this.drawbalance=drawbalance; 9 this.obj=obj; 10 //start(); 11 } 12 public void run(){ 13 try{sleep(100);}catch(Exception e){} 14 synchronized(obj){ 15 if(drawbalance>account.getBalance()){ 16 System.out.println("余额不足!"); 17 }else{ 18 System.out.println("吐钱成功!"); 19 try{ 20 sleep(100); 21 System.out.println("取钱:"+drawbalance); 22 account.setBalance(account.getBalance()-drawbalance); 23 System.out.println("余额为:"+account.getBalance()); 24 }catch(Exception e){ 25 System.out.println(e); 26 } 27 } 28 } 29 30 31 } 32 public static void main(String[] args){ 33 34 Object o=new Object();//传到了两个线程中,保证了是同一个锁。 35 Account a=new Account("刘腾",100000); 36 new SynchronizedClass("A线程",a,100000,o).start(); 37 new SynchronizedClass("B线程",a,10000,o).start(); 38 } 39 } 40 41 //账户 42 class Account { 43 private String name; 44 private double balance; 45 public Account(){} 46 public Account(String name,double balance){ 47 this.name=name; 48 this.balance=balance; 49 } 50 public void setName(String name){ 51 this.name=name; 52 } 53 public void setBalance(double balance){ 54 this.balance=balance; 55 } 56 public String getName(){ 57 return name; 58 } 59 public double getBalance(){ 60 return balance; 61 } 62 63 /* 64 public boolean equals(Object obj){ 65 if(this==obj)return true; 66 if(obj==null)return false; 67 if(getClass()!=obj.getClass())return false; 68 Account other =(Account) obj; 69 if(other.name==name&&other.balance==balance)return true; 70 else return false; 71 } 72 */ 73 }