二 線程安全

編寫(xiě)線程安全的代碼的核心是:

對(duì)可變共享的狀態(tài)訪問(wèn)的管理。

三種(多個(gè)線程對(duì)同一個(gè)可變的狀態(tài)變量沒(méi)有做合適的同步時(shí) 出現(xiàn)錯(cuò)誤的解決方法):
  1. 不共享
  2. 不修改
  3. 加同步 一般前兩個(gè)是避免不了的時(shí)候加鎖。

需要考慮線程安全的情況
對(duì)于可能被多個(gè)線程同時(shí)訪問(wèn)的可變狀態(tài)變量,在訪問(wèn)它的時(shí)候都要持有同一個(gè)鎖。
一般的加鎖機(jī)制是 把可變共享變量封裝在一個(gè)對(duì)象中,然后對(duì)本對(duì)象加鎖。例如Vector類

同步策略:
  1. 內(nèi)置鎖(可重入),
  2. 讀寫(xiě)鎖(復(fù)制)
  3. Lock
  4. Collections獲取
  5. 并發(fā)容器 原子操作 AtomicLong

原子性

原子類 AtomicLong等 作用:降低使用synchronized 并發(fā)。提升性能。

比如Vector類是同步類。
但是執(zhí)行復(fù)合操作的時(shí)候并不能保證線程安全。此時(shí)需要使用鎖。

復(fù)合操作 和 多線程執(zhí)行順序(競(jìng)態(tài)條件)問(wèn)題 引發(fā)的無(wú)法使用原子性類解決

復(fù)合操作情況下 原子操作也會(huì)出現(xiàn)問(wèn)題
需要使用鎖

鎖(原子操作無(wú)法實(shí)現(xiàn)的解決方法)

鎖,用來(lái)鎖住可變共享 狀態(tài)。
有一個(gè)例子是使用了鎖,但是因?yàn)椴皇擎i的可變共享變量,而是鎖的本對(duì)象(本對(duì)象并沒(méi)有封裝這個(gè)可變共享變量)導(dǎo)致線程不安全。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 上一篇文章中介紹了多線程的基本使用,這一篇文章重點(diǎn)介紹線程的安全問(wèn)題。 四、Java中線程的五種狀態(tài) 新建狀態(tài)(N...
    地球是猿的閱讀 801評(píng)論 0 1
  • 一.線程安全性 線程安全是建立在對(duì)于對(duì)象狀態(tài)訪問(wèn)操作進(jìn)行管理,特別是對(duì)共享的與可變的狀態(tài)的訪問(wèn) 解釋下上面的話: ...
    黃大大吃不胖閱讀 961評(píng)論 0 3
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂(lè)視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,804評(píng)論 11 349
  • 第三章 Java內(nèi)存模型 3.1 Java內(nèi)存模型的基礎(chǔ) 通信在共享內(nèi)存的模型里,通過(guò)寫(xiě)-讀內(nèi)存中的公共狀態(tài)進(jìn)行隱...
    澤毛閱讀 4,502評(píng)論 2 21
  • 我心中永遠(yuǎn)堅(jiān)強(qiáng)、勇敢的雜草杉菜(大S) 西方曾經(jīng)有位哲人說(shuō)過(guò), 女人啊, 華麗的金鉆,閃耀的珠光, 為你贏得了女皇...
    keqing閱讀 353評(píng)論 0 0

友情鏈接更多精彩內(nèi)容