大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

Java多線程編程概述
Java多線程的安全問題
Java多線程同步
Java多線程間的通信
Java線程Lock
Java多線程管理
保障線程安全的設計技術
Java鎖的優化及注意事項
Java多線程集合
【Java多線程】單例模式與多線程

Java多線程鎖

線程安全問題的產生前提是多個線程并發訪問共享數據。

將多個線程對共享數據的并發訪問轉換為串行訪問,即一個共享數據一次只能被一個線程訪問.鎖就是復用這種思路來保障線程安全的。

鎖(Lock)可以理解為對共享數據進行保護的一個許可證. 對于同一個許可證保護的共享數據來說,任何線程想要訪問這些共享數據必須先持有該許可證. 一個線程只有在持有許可證的情況下才能對這些共享數據進行訪問; 并且一個許可證一次只能被一個線程持有; 許可證線程在結束對共享數據的訪問后必須釋放其持有的許可證。

一線程在訪問共享數據前必須先獲得鎖; 獲得鎖的線程稱為鎖的持有線程; 一個鎖一次只能被一個線程持有. 鎖的持有線程在獲得鎖之后 和釋放鎖之前這段時間所執行的代碼稱為臨界區(Critical Section)。

鎖具有排他性(Exclusive), 即一個鎖一次只能被一個線程持有.這種鎖稱為排它鎖或互斥鎖(Mutex)。

JVM把鎖分為內部鎖和顯示鎖兩種. 內部鎖通過synchronized關鍵字實現; 顯示鎖通過java.concurrent.locks.Lock接口的實現類實現的。

Java線程鎖的作用

鎖可以實現對共享數據的安全訪問. 保障線程的原子性,可見性與有序性。

鎖是通過互斥保障原子性. 一個鎖只能被一個線程持有, 這就保證臨界區的代碼一次只能被一個線程執行.使得臨界區代碼所執行的操作自然而然的具有不可分割的特性,即具備了原子性。

可見性的保障是通過寫線程沖刷處理器的緩存和讀線程刷新處理器緩存這兩個 動作實現的. 在java平臺中,鎖的獲得隱含著刷新處理器緩存的動作, 鎖的釋放隱含著沖刷處理器緩存的動作。

鎖能夠保障有序性.寫線程在臨界區所執行的在讀線程所執行的臨界區看來像是完全按照源碼順序執行的。

注意:

使用鎖保障線程的安全性,必須滿足以下條件:

● 這些線程在訪問共享數據時必須使用同一個鎖。

● 即使是讀取共享數據的線程也需要使用同步鎖。

線程鎖相關的概念

可重入性

可重入性(Reentrancy)描述這樣一個問題: 一個線程持有該鎖的時候能再次(多次)申請該鎖。

void   methodA(){
   申請a鎖
methodB();
釋放a鎖
}
void  methodB(){
      申請a鎖
      ....
      釋放a鎖
}

如果一個線程持有一個鎖的時候還能夠繼續成功申請該鎖,稱該鎖是可重入的, 否則就稱該鎖為不可重入的。

鎖的爭用與調度

Java平臺中內部鎖屬于非公平鎖, 顯示Lock鎖既支持公平鎖又支持非公平鎖。

鎖的粒度

一個鎖可以保護的共享數據的數量大小稱為鎖的粒度。

鎖保護共享數據量大,稱該鎖的粒度粗, 否則就稱該鎖的粒度細。

鎖的粒度過粗會導致線程在申請鎖時會進行不必要的等待.鎖的粒度過細會增加鎖調度的開銷。

全部教程
主站蜘蛛池模板: 欧美操片 | 99热久久只有精品99只有精品 | 亚洲加勒比久久88色综合1 | 欧美在线视频一区二区 | 99爱视频在线观看 | 中文一级黄色片 | 久青草视频在线播放 | 久久大香伊蕉在人线观看热2 | 一级毛片日本特黄97人人 | 香蕉久久一区二区三区 | 青草视频国产 | 波多野结衣一区二区三区在线观看 | 国产精品视频免费看 | 国产色婷婷精品综合在线手机播放 | 一本到中文字幕高清不卡在线 | 99爱免费观看视频在线 | 精品视频h| 亚洲成人中文字幕 | 亚州精品一区二区三区 | 亚洲一区综合在线播放 | 欧美性精品不卡在线观看 | 四虎视频国产精品免费入口 | 国产精品伦理 | 久久黄色免费视频 | 欧美成人网在线综合视频 | 成人免费视频国产 | 毛片视频大全 | 2021国产精品久久久久 | 九九亚洲精品自拍 | 久久久久亚洲精品一区二区三区 | 中文字幕一区二区三区精彩视频 | 久久婷婷午色综合夜啪 | 成人国产一区二区三区 | 中文字幕三级理论影院 | 亚洲一区二区三区精品国产 | 日本在线色 | 免费的性生活视频 | 日韩免费一级毛片欧美一级日韩片 | 一级毛片在线观看视频 | 欧美色视频在线观看 | 深夜精品寂寞在线观看黄网站 |