臨界區:臨界區是乙個用以訪問訪問共享資源的**塊,這個**塊在同一時間內只允許乙個執行緒執行。
重入鎖:當末個執行緒請求乙個由其他執行緒持有的鎖時,發出的請求的執行緒就會阻塞,然而內建鎖(synchronized)是可重入的,因此如果末個執行緒試圖獲得乙個已經由他自己持有的鎖,那麼這個請求就會成功。
synchronized 和 reentrantlock 都是重入鎖。
public class test1
public void getone()throws exception
}public void gettwo()throws exception
}public static void main(string args) throws exception catch (exception e)
}}).start();;}}
}
輸出結果:
獲取第乙個鎖
獲取第二個鎖
獲取第乙個鎖
獲取第二個鎖
獲取第乙個鎖
如果getone()方法 不能獲取lock鎖的物件,那麼gettwo()這個方法就會一直阻塞,整個執行緒都會阻塞。
public class test1
public void getone()throws exception
public void gettwo()throws exception
public static void main(string args) throws exception catch (exception e)
}}).start();;}}
}
輸出結果:
獲取第乙個鎖
獲取第二個鎖
獲取第乙個鎖
獲取第二個鎖
獲取第乙個鎖
獲取第二個鎖
lock 獲取幾次鎖就要釋放幾次,不然執行緒就會阻塞。
lock獲取鎖的**:
final boolean nonfairtryacquire(int acquires)
}//如果獲取不到鎖,進判斷當前執行緒和持有鎖的執行緒是否是同乙個
else if (current == getexclusiveownerthread())
return false;
}
synchronized:如果寫在方法上 那麼鎖住的是當前物件是this,如果寫在靜態方法上那麼鎖住就是當前類的class如:xx.class。
reentrantlock: lock.trylock() 嘗試獲取鎖,如果獲取到就true, 獲取不到就返回,這樣執行緒獲取不到鎖線程也不會阻塞。
JAVA中線程同步方法
在這裡看到的 1 wait方法 該方法屬於object的方法,wait方法的作用是使得當前呼叫wait方法所在部分 塊 的執行緒停止執行,並釋放當前獲得的呼叫wait所在的 塊的鎖,並在其他執行緒呼叫notify或者notifyall方法時恢復到競爭鎖狀態 一旦獲得鎖就恢復執行 呼叫wait方法需要...
JAVA中線程同步方法
1wait方法 該方法屬於object的方法,wait方法的作用是使得當前呼叫wait方法所在部分 塊 的執行緒停止執行,並釋放當前獲得的呼叫wait所在的 塊的鎖,並在其他執行緒呼叫notify或者notifyall方法時恢復到競爭鎖狀態 一旦獲得鎖就恢復執行 呼叫wait方法需要注意幾點 第一點...
java中線程的同步性
目的 測試同步 塊和同步函式鎖定同乙個物件才能實現執行緒安全 其實我們能夠實現執行緒同步其實就是因為我們在執行到某乙個執行緒的時候,設定了乙個標誌 也就是我們鎖定了乙個物件,要實現執行緒的同步,我們每次鎖定的物件必須要是同乙個 class lesson5testdemo1 catch excepti...