并發(fā)模型之線程與鎖

三個(gè)問題

  • 競態(tài)條件
  • 死鎖
  • 內(nèi)存可見性

規(guī)則

  • 訪問共享變量時(shí)需要同步
  • 讀線程和寫線程都要同步化
  • 持有鎖的時(shí)間應(yīng)該盡可能短
  • 按照全局的固定的順序來獲得多把鎖
  • 持有鎖時(shí)避免調(diào)用外星方法

java中的一些問題

  • 編譯器的靜態(tài)優(yōu)化可以打亂代碼的執(zhí)行順序
  • JVM的動(dòng)態(tài)優(yōu)化也會(huì)打亂代碼的執(zhí)行順序
  • 硬件可以通過亂序執(zhí)行來優(yōu)化其性能

線程

  • 有時(shí)候一個(gè)線程的修改 可能對另一個(gè)線程不可見

java內(nèi)存模型

  • 如果讀線程和寫線程不進(jìn)行同步,就不能保證可見性
  • 同步方法
    • 獲取對象內(nèi)置鎖
    • 開啟一個(gè)線程并且通過join()檢查線程是否已經(jīng)終止。
    • 使用java.util.concurrent包提供的工具
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容