那些瑣事

一.概況
鎖按照大類分爲線程鎖和進程鎖,此文現只討論線程鎖
二.分類
1.線程是否要鎖住同步資源:
鎖住:悲觀鎖
不鎖住: 樂觀鎖 CAS
2.鎖住同步資源失敗,線程是否要阻塞:
阻塞
不阻塞:
自旋鎖
適應性自旋鎖
3.多個線程競爭同步資源的流程細節有沒有區別:
不鎖住資源,多個線程中只有一個能修改資源成功,其他線程會重試: 無鎖
同一個線程執行同步資源時自動獲取資源: 偏向鎖
多個線程競爭同步資源時,沒有獲取資源的線程自旋等待鎖釋放: 輕量級鎖
多個線程競爭同步資源時,沒有獲取資源的線程阻塞等待喚醒: 重量級鎖
4.多個線程競爭鎖時是否要排隊:
排隊:公平鎖
先嚐試插隊,插隊失敗再排隊: 非公平鎖 AQS
5.一個線程的多個流程能不能獲取同一把鎖:
能:可重入鎖
不能:非可 重入鎖
6.多個線程能不能共享一把鎖:
能:共享鎖
不能:排它鎖(獨佔鎖)
三,一些理解
所有的鎖其實都是線程和資源的結合,也就是說鎖是針對線程和數據庫或者是代碼來的,上述所有的鎖,都是最基本的元素之間的組合
synchronized、LOCK下的ReentrantLock、以及數據庫鎖
實現的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章