1. 程式人生 > >sychronized的兩種使用和它們的區別

sychronized的兩種使用和它們的區別

第一種 

public sychronized void test(){

}

第二種

private final Object lock=new Object();

public void test(int  i){

sychronized (lock){

if(i<0){

lock.wait();

}

lock.notifyAll();

}

}

兩種方法多能實現方法互斥,如果方法內不需要判定,比如i<0的情況不需要排除,就用第一種,但是如果需要排除i<0的情況,就用第二種,如果第一種方法裡有if(i<0){}當程式執行到這裡,就會產生死鎖,別的執行緒進不來,程式卡死在if(i<0){}裡