Java線程安全與鎖優(yōu)化

一闹丐、Java語言中的線程安全
? ? ?Java語言中各種操作共享數(shù)據(jù)分為:不可變阱高、絕對線程安全赚导、相對線程安全、線程兼容和線程對立赤惊。

不可變:不可變的對象一定是線程安全的吼旧。基本數(shù)據(jù)類型未舟,在定義時使用final修飾它就可以保證不可變圈暗,對象類型,把對象中帶狀態(tài)的變量都聲明為final,這樣構(gòu)造函數(shù)結(jié)束后处面,它就是不可變的厂置。
絕對線程安全:不管運行時環(huán)境如何,調(diào)用者都不需要任何額外的同步措施魂角。Vector舉例,多線程并發(fā)時智绸,并不安全野揪。
相對線程安全:保證這個對象访忿,單獨操作是線程安全的,我們在調(diào)用的時候需要做額外的保障措施斯稳,Vector,比如HashTable,Collections的synchronizedCollection
線程兼容:對象本身不是線程安全的粱甫,可以在調(diào)用端通過使用同步手段保證對象在并發(fā)環(huán)境中可以安全的使用硝皂,比如Arraylist、HashMap。
線程對立:無論采用什么手段螃征,都無法保證對象在多線程并發(fā)環(huán)境中保證線程安全。

二挚躯、線程安全的實現(xiàn)方法
?1忍捡、互斥同步:阻塞同步,通過關(guān)鍵字synchronized,會在同步塊前加monitorenter竖幔、monitorexit這兩個字節(jié)碼指令板乙。執(zhí)行monitorenter指令時,首先嘗試獲取對象的鎖拳氢,如果對象沒有被鎖定或者對象已被鎖定募逞,把鎖的計數(shù)器加1,在執(zhí)行monitorexit指令時馋评,操作計數(shù)器減1放接,當計數(shù)器為0時,鎖就被釋放留特,如果獲取鎖失敗纠脾,那當前線程就要阻塞等待,直到鎖對象被另外一個線程釋放為止磕秤。
?ReentrantLock:具備線程重入特性乳乌,有等待可中斷,可實現(xiàn)公平鎖市咆,以及鎖可以綁定多個條件汉操。
等待可中斷:是指當持有鎖的線程長期不釋放鎖的時候,正在等待的線程可以放棄等待蒙兰,去處理其他的事情磷瘤。
公平鎖:是指多個線程在等待同一個鎖時,必須按照申請鎖的時間先后順序依次來獲得鎖搜变,非公平鎖:在鎖被釋放時采缚,任何一個等待的鎖都有機會獲得鎖。synchronized鎖是非公平鎖挠他,ReentrantLock默認是非公平鎖扳抽,可以帶boolean指,為公平鎖。
鎖可以綁定多個條件贸呢。
2镰烧、非阻塞同步

二、鎖優(yōu)化
? ? ? 鎖包括自旋鎖與自適應(yīng)鎖楞陷,鎖消除怔鳖、鎖粗化,輕量級鎖固蛾、偏向鎖结执。
? ? ? 自旋鎖:并發(fā)時,請求鎖艾凯,稍等一下献幔,但不放棄處理器的執(zhí)行時間,看看持有鎖的線程是否會很快釋放鎖览芳,如果鎖占用時間短斜姥,自旋等待的效果較好,否則沧竟,白白浪費處理器的時間铸敏,自旋的次數(shù)默認10次。
? ? ? 自適應(yīng)鎖:就是自適應(yīng)的自旋鎖悟泵,自旋的時間不固定了杈笔,根據(jù)歷史獲取鎖的情況,自動決定是否要自旋等待糕非,若果一個鎖很多次不能通過自旋獲得鎖蒙具,下次可能就直接掛起而不是自旋等待。
? ? ? 鎖消除:對一些代碼上要求同步朽肥,但是檢測到不可能存在共享數(shù)據(jù)競爭的鎖進行消除禁筏。
? ? ? 鎖粗化:如果一系列連續(xù)的操作都對同一個對象反復(fù)枷鎖和解鎖,就會采用鎖粗化衡招,將鎖的范圍擴大篱昔。
? ? ?輕量級鎖:無競爭的情況下,使用CAS操作去消除同步使用的互斥量始腾。
? ? ?偏向鎖:無競爭的情況下州刽,把整個同步都消除掉,CAS操作也不做了浪箭。

??

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末穗椅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子奶栖,更是在濱河造成了極大的恐慌匹表,老刑警劉巖门坷,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異桑孩,居然都是意外死亡拜鹤,警方通過查閱死者的電腦和手機框冀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門流椒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人明也,你說我怎么就攤上這事宣虾。” “怎么了温数?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵绣硝,是天一觀的道長。 經(jīng)常有香客問我撑刺,道長鹉胖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任够傍,我火速辦了婚禮甫菠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘冕屯。我一直安慰自己寂诱,他們只是感情好,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布安聘。 她就那樣靜靜地躺著痰洒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪浴韭。 梳的紋絲不亂的頭發(fā)上丘喻,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機與錄音念颈,去河邊找鬼泉粉。 笑死,一個胖子當著我的面吹牛舍肠,可吹牛的內(nèi)容都是我干的搀继。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼翠语,長吁一口氣:“原來是場噩夢啊……” “哼叽躯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起肌括,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤点骑,失蹤者是張志新(化名)和其女友劉穎酣难,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體黑滴,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡憨募,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了袁辈。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片菜谣。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖晚缩,靈堂內(nèi)的尸體忽然破棺而出尾膊,到底是詐尸還是另有隱情,我是刑警寧澤荞彼,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布冈敛,位于F島的核電站,受9級特大地震影響鸣皂,放射性物質(zhì)發(fā)生泄漏抓谴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一寞缝、第九天 我趴在偏房一處隱蔽的房頂上張望癌压。 院中可真熱鬧,春花似錦第租、人聲如沸措拇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丐吓。三九已至,卻和暖如春趟据,著一層夾襖步出監(jiān)牢的瞬間券犁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工汹碱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留粘衬,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓咳促,卻偏偏與公主長得像稚新,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子跪腹,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

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