回覆列表
  • 1 # 使用者935239482588

    一、公平鎖/非公平鎖

    公平鎖是指多個執行緒按照申請鎖的順序來獲取鎖。

    非公平鎖是指多個執行緒獲取鎖的順序並不是按照申請鎖的順序,有可能後申請的執行緒比先申請的執行緒優先獲取鎖。有可能,會造成優先順序反轉或者飢餓現象。

    對於Java ReentrantLock而言,透過建構函式指定該鎖是否是公平鎖,預設是非公平鎖。非公平鎖的優點在於吞吐量比公平鎖大。

    對於Synchronized而言,也是一種非公平鎖。由於其並不像ReentrantLock是透過AQS的來實現執行緒排程,所以並沒有任何辦法使其變成公平鎖。

    二、可重入鎖

    可重入鎖又名遞迴鎖,是指在同一個執行緒在外層方法獲取鎖的時候,在進入內層方法會自動獲取鎖。說的有點抽象,下面會有一個程式碼的示例。

    對於Java ReentrantLock而言, 他的名字就可以看出是一個可重入鎖,其名字是Re entrant Lock重新進入鎖。

    對於Synchronized而言,也是一個可重入鎖。可重入鎖的一個好處是可一定程度避免死鎖。

    synchronized void setA() throws Exception{

    Thread.sleep(1000);

    setB();

  • 中秋節和大豐收的關聯?
  • 哪些東西能導電?