synchronized修饰方法和代码块的区别
生活随笔
收集整理的這篇文章主要介紹了
synchronized修饰方法和代码块的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
先看一段代碼
Class A {public synchronized methodA() {//對當前對象加鎖 }public methodB() {synchronized(this){}//對當前對象加鎖,與methodA用法相同 }public static synchronized methodC() {}//對類加鎖,即對所有此類的對象加鎖public methodD(){synchronized(A.class){}//對類加鎖,即對所有此類的對象加鎖 }}synchronize用法關鍵是搞清楚對誰加鎖,methodA,和methodB都是對當前對象加鎖,即如果有兩個線程同時訪問同一個對象的methoA和methodB則會發生競爭,必須等待其中一個執行完成后另一個才會執行。如果兩個線程訪問的是不同對象的methodA和methodB則不會競爭。
methodC和methodD是對類的class對象加鎖,methodC和methodD的加鎖對象一樣,效果也一樣。如果兩個線程同時訪問同一個對象的methodC和methodD是會發生競爭的,兩個線程同時訪問不同對象的methodC和methodD是也是會發生競爭的,如果兩個線程同時訪問methoA/B 和methodC/D則不會發生競爭,因為鎖對象不同。
?
總結
以上是生活随笔為你收集整理的synchronized修饰方法和代码块的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Cloud-微服务架构集大
- 下一篇: Android项目实战(三十二):圆角对