1:该关键字修饰的方法为同步方法
2:java中每个对象都有一个锁(lock)或者说是监视器(monitor),当访问某个对象的synchornized方法时,表示给该对象上锁,其他任何线程都无法再访问该对象的synchornized方法了,直到该方法执行完毕后或者抛出异常后其他线程方可访问
3:如果synchornized修饰的是static方法 则锁上升到Class锁,也就是表示锁会锁住当前类的Class对象
4:synchorinzed块 写法:
synchornized(object){
.......
}
该方法比较适用于一个方法内只有个别代码需要被同步的情况
public class ClientThread2 {
/**
* @param args
*/
public static void main(String[] args) {
Bank b=new Bank();
Thread t1=new BankTest(b);
Thread t2=new BankTest(b);
t1.start();
t2.start();
}
}
class Bank{
private int money=1000;
public synchronized int getMoney(int money){
if(money<0){
return -1;
}else if(money>this.money){
return -2;
}else{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.money-=money;
System.out.println(this.money);
return money;
}
}
}
class BankTest extends Thread{
private Bank bank;
public BankTest(Bank bank){
this.bank=bank;
}
@Override
public void run() {
System.out.println(bank.getMoney(800));
}
}