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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

线程同步的学习

發布時間:2023/12/3 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线程同步的学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、同步代碼塊
  • 二、同步方法
    • 靜態同步方法
  • 三、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 {} 語句塊中,無論是否出現異常都會釋放鎖

總結

以上是生活随笔為你收集整理的线程同步的学习的全部內容,希望文章能夠幫你解決所遇到的問題。

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