日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

面试常考:Synchronized 有几种用法?

發布時間:2025/3/21 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面试常考:Synchronized 有几种用法? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

1、同步普通方法

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

/***?用在普通方法*/ private?synchronized?void?synchronizedMethod()?{System.out.println("synchronizedMethod");try?{Thread.sleep(2000);}?catch?(InterruptedException?e)?{e.printStackTrace();} }

此時,同一個實例只有一個線程能獲取鎖進入這個方法。

2、同步靜態方法

同步靜態方法,不管你有多少個類實例,同時只有一個線程能獲取鎖進入這個方法。

/***?用在靜態方法*/ private?synchronized?static?void?synchronizedStaticMethod()?{System.out.println("synchronizedStaticMethod");try?{Thread.sleep(2000);}?catch?(InterruptedException?e)?{e.printStackTrace();} }

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

3、同步類

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

/***?用在類*/ private?void?synchronizedClass()?{synchronized?(TestSynchronized.class)?{System.out.println("synchronizedClass");try?{Thread.sleep(2000);}?catch?(InterruptedException?e)?{e.printStackTrace();}} }/***?用在類*/ private?void?synchronizedGetClass()?{synchronized?(this.getClass())?{System.out.println("synchronizedGetClass");try?{Thread.sleep(2000);}?catch?(InterruptedException?e)?{e.printStackTrace();}} }

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

4、同步this實例

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

/***?用在this*/ private?void?synchronizedThis()?{synchronized?(this)?{System.out.println("synchronizedThis");try?{Thread.sleep(2000);}?catch?(InterruptedException?e)?{e.printStackTrace();}} }

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

5、同步對象實例

這也是同步塊的用法,和上面的鎖住當前實例一樣,這里表示鎖住整個 LOCK 對象實例,只有獲取到這個 LOCK 實例的鎖才能進入這個方法。

/***?用在對象*/ private?void?synchronizedInstance()?{synchronized?(LOCK)?{System.out.println("synchronizedInstance");try?{Thread.sleep(2000);}?catch?(InterruptedException?e)?{e.printStackTrace();}} }

另外,類鎖與實例鎖不相互阻塞,但相同的類鎖,相同的當前實例鎖,相同的對象鎖會相互阻塞。

關于 Synchronized 的幾種用法棧長就介紹到這里了,如果你還知道其他的用法,歡迎留言。

?

來源:java技術棧

總結

以上是生活随笔為你收集整理的面试常考:Synchronized 有几种用法?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。