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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何解决线程安全的问题

發(fā)布時(shí)間:2025/3/21 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何解决线程安全的问题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

核心思想:上鎖 分布式鎖

在同一個(gè)jvm中,多個(gè)線程需要競爭鎖的資源,最終只能夠有一個(gè)線程
能夠獲取到鎖,多個(gè)線程同時(shí)搶同一把鎖,誰(線程)能夠獲取到鎖,
誰就可以執(zhí)行到該代碼,如果沒有獲取鎖成功 中間需要經(jīng)歷鎖的升級(jí)過程
如果一致沒有獲取到鎖則會(huì)一直阻塞等待。
如果線程A獲取鎖成功 但是線程A一直不釋放鎖
線程B一直獲取不到鎖,則會(huì)一直阻塞等待。

代碼從那一塊需要上鎖?-----可能會(huì)發(fā)生線程安全性問題的代碼需要上鎖。
Juc并發(fā)編程 鎖 重入鎖 悲觀鎖 樂觀鎖 公平鎖 非公平鎖

線程0 線程1 同時(shí)獲取 this鎖,假設(shè)線程0 獲取到this ,意味著線程1沒有獲取到鎖
則會(huì)阻塞等待。等我們線程0 執(zhí)行完count-- 釋放鎖之后 就會(huì)喚醒 線程1從新進(jìn)入
到獲取鎖的資源。

獲取鎖與釋放鎖 全部都是有底層虛擬機(jī)實(shí)現(xiàn)好了。

對(duì)一塊代碼加鎖缺點(diǎn):
可能會(huì)影響到程序的執(zhí)行效率。

如果是同一把鎖 在多線程的情況下 最終只能夠給一個(gè)線程使用。
如果有線程持有了該鎖 意味著其他的線程 不能夠在繼續(xù)獲取鎖

核心思想:當(dāng)多個(gè)線程共享同一個(gè)全局變量時(shí),將可能會(huì)發(fā)生線程安全的代碼
上鎖,保證只有拿到鎖的線程才可以執(zhí)行,沒有拿到鎖的線程不可以執(zhí)行,需要阻塞等待。

  • 使用synchronized鎖,JDK1.6開始 鎖的升級(jí)過程 juc 18-25
  • 使用Lock鎖 ,需要自己實(shí)現(xiàn)鎖的升級(jí)過程。底層是基于aqs實(shí)現(xiàn)
  • 使用Threadlocal,需要注意內(nèi)存泄漏的問題。
  • 原子類 CAS 非阻塞式
  • 總結(jié)

    以上是生活随笔為你收集整理的如何解决线程安全的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。