对象级别锁 vs 类级别锁 – Java
生活随笔
收集整理的這篇文章主要介紹了
对象级别锁 vs 类级别锁 – Java
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
同步針對的是多線程。同步的方法或代碼塊同時只能由一個線程執行。
Java支持多線程來執行。這可能會導致兩個或多個線程訪問同一個字段或對象。同步是一個使所有并發執行的線程同步的過程。同步避免了由于共享內存視圖不一致而導致的內存一致性錯誤。當一個方法被聲明為同步時,如果一個線程正在執行同步方法,線程保存該方法對象的監視器(monitor),同時該線程被阻塞,直到該線程釋放監視器(monitor)為止。
同步在Java中使用synchronized關鍵字實現。可以在類中定義的方法或塊使用同步關鍵字。關鍵字不能與類定義中的局部變量一起使用。
對象級別鎖
對象級別鎖是一種當您想同步非靜態方法或非靜態代碼塊時,只有一個線程能夠在類的給定實例上執行代碼塊的機制。應該始終這樣做,使實例級數據線程安全。這可以做如下:
public class DemoClass {public synchronized void demoMethod(){} }或
public class DemoClass {public void demoMethod(){synchronized (this){//other thread safe code }} }或
public class DemoClass {private final Object lock = new Object();public void demoMethod(){synchronized (lock){//other thread safe code }} }類級別鎖
類級鎖定防止在運行時多個線程進入所有可用實例中的同步塊中。這意味著,如果在運行時有100 DemoClass實例,那么只有一個線程可以在同一時間在任何一個實例上執行demomethod(),對其他線程而言所有其他的實例將被鎖。這樣做總是為了使靜態數據線程安全。
public class DemoClass {public synchronized static void demoMethod(){} }或
public class DemoClass {public void demoMethod(){synchronized (DemoClass.class){//other thread safe code }} }或
public class DemoClass {private final static Object lock = new Object();public void demoMethod(){synchronized (lock){//other thread safe code }} }一些重要的事項
Happy Learning !!
?
轉載于:https://www.cnblogs.com/keeplearnning/p/7003992.html
總結
以上是生活随笔為你收集整理的对象级别锁 vs 类级别锁 – Java的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# 7中函数多值返回_转自InfoQ
- 下一篇: 问题和任务包003.使用报告.数据可视化