同步块
synchronized(Obj){} Obj一定要是在动的对象,例如银行账户
package sai. company. lesson2;
public class UnsafeBank {
public static void main ( String[ ] args) {
Account account = new Account ( 1000 , "建设银行" ) ;
new Drawing ( account, 50 , "大傻" ) . start ( ) ;
new Drawing ( account, 100 , "寡妇姐" ) . start ( ) ;
}
}
class Account {
int money;
String name;
public Account ( int money, String name) {
this . money = money;
this . name = name;
}
}
class Drawing extends Thread {
Account account;
int drawMoney;
int nowMoney;
boolean flag= true ;
public Drawing ( Account account, int drawMoney, String name) {
super ( name) ;
this . account = account;
this . drawMoney = drawMoney;
}
@Override
public void run ( ) {
try {
Thread. sleep ( 1 ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
}
synchronized ( account) {
}
do {
if ( ( account. money- drawMoney< 0 ) ) {
System. out. println ( this . getName ( ) + "账户里没有钱" ) ;
flag= false ;
return ;
}
account. money= account. money- drawMoney;
nowMoney= nowMoney+ drawMoney;
System. out. println ( this . getName ( ) + "取了" + drawMoney+ "余额为" + account. money) ;
} while ( flag) ;
}
}
必须配合sleep使用