synchronized幾種常見用法

2021-10-24 16:34:10 字數 1413 閱讀 1738

我們都知道 synchronized 是執行緒安全同步用的,大部分程式可能只會用到同步方法上面。其實 synchronized 可以用到更多的場合,棧長列舉了以下幾個用法。

這個也是我們用得最多的,只要涉及執行緒安全,上來就給方法來個同步鎖。這種方法使用雖然最簡單,但是只能作用在單例上面,如果不是單例,同步方法鎖將失效。

/**

* 用在普通方法

*/private synchronized void synchronizedmethod() catch (interruptedexception e)

}

此時,同乙個例項只有乙個執行緒能獲取鎖進入這個方法。

同步靜態方法,不管你有多少個類例項,同時只有乙個執行緒能獲取鎖進入這個方法。

/**

* 用在靜態方法

*/private synchronized static void synchronizedstaticmethod() catch (interruptedexception e)

}

同步靜態方法是類級別的鎖,一旦任何乙個執行緒進入這個方法,其他所有執行緒將無法訪問這個類的任何同步類鎖的方法。

下面提供了兩種同步類的方法,鎖住效果和同步靜態方法一樣,都是類級別的鎖,同時只有乙個執行緒能訪問帶有同步類鎖的方法。

/**

* 用在類

*/private void synchronizedclass() catch (interruptedexception e)

}}/**

* 用在類

*/private void synchronizedgetclass() catch (interruptedexception e)

}}

這裡的兩種用法是同步塊的用法,這裡表示只有獲取到這個類鎖才能進入這個**塊。

這也是同步塊的用法,表示鎖住整個當前物件例項,只有獲取到這個例項的鎖才能進入這個方法。

/**

* 用在this

*/private void synchronizedthis() catch (interruptedexception e)

}}

用法和同步普通方法鎖一樣,都是鎖住整個當前例項。

這也是同步塊的用法,和上面的鎖住當前例項一樣,這裡表示鎖住整個 lock 物件例項,只有獲取到這個 lock 例項的鎖才能進入這個方法。

/**

* 用在物件

*/private void synchronizedinstance() catch (interruptedexception e)

}}

另外,類鎖與例項鎖不相互阻塞,但相同的類鎖,相同的當前例項鎖,相同的物件鎖會相互阻塞。

synchronized的幾種用法

1.方法宣告時使用,放在範圍操作符 public等 之後,返回型別宣告 void等 之前.這時,執行緒獲得的是成員鎖,即一次只能有乙個執行緒進入該方法,其他執行緒要想在此時呼叫該方法,只能排隊等候,當前執行緒 就是在synchronized方法內部的執行緒 執行完該方法後,別的執行緒才能進入.2.對...

Synchronized 的幾種用法

這個也是我們用得最多的,只要涉及執行緒安全,上來就給方法來個同步鎖。這種方法使用雖然最簡單,但是只能作用在單例上面,如果不是單例,同步方法鎖將失效。用在普通方法 private synchronized void synchronizedmethod catch interruptedexcepti...

Synchronized的幾種用法

我們都知道 synchronized 是執行緒安全同步用的,大部分程式可能只會用到同步方法上面。其實 synchronized 可以用到更多的場合,棧長列舉了以下幾個用法。這個也是我們用得最多的,只要涉及執行緒安全,上來就給方法來個同步鎖。這種方法使用雖然最簡單,但是只能作用在單例上面,如果不是單例...