线程同步的学习
文章目錄
- 一、同步代碼塊
- 二、同步方法
- 靜態同步方法
- 三、Lock
解決線程安全問題的三種方案:同步代碼塊、同步方法、使用 Lock
一、同步代碼塊
synchronized(同步鎖對象) { 需要同步操作的代碼 }注:
1.鎖對象可以是任意對象
2.必須保證多個線程使用同一個鎖對象
問:為什么隨便放個對象,就可以鎖住代碼塊呢?什么原理?
二、同步方法
public synchronized void method() { 可能會產生線程安全問題的代碼 }注:同步方法默認使用當前對象作為鎖對象,也就是當前方法的所屬實例對象,即 this
靜態同步方法
public static synchronized void method() { 可能會產生線程安全問題的代碼 }注:鎖對象是當前類的 Class 對象。
三、Lock
Lock 是一個接口,其中有兩個抽象方法:
public abstract void lock(); // 獲取鎖 public abstract void unlock(); // 釋放鎖在存在線程安全問題的代碼所在類中,聲明定義一個成員變量,變量存放接口 Lock 實現類對象的內存地址,如下所示:
Lock lock = new ReentrantLock(); // ReentrantLock 是接口 Lock 的實現類然后在存在線程安全問題的代碼執行前加鎖
lock.lock();代碼執行結束后,釋放鎖:
lock.unlock();建議:將 lock.unlock() 放在 finally {} 語句塊中,無論是否出現異常都會釋放鎖
總結
- 上一篇: Linux的作用(在linux的作用)
- 下一篇: 英语中的开音节和闭音节