Java多線程——學習筆記二:Synchronized 鎖重入 & volatile關鍵字 & ThreadLocal

Synchronized 鎖重入

使用Synchronized的時候,當一個線程獲得一個對象的鎖诚纸,在這個線程里面執(zhí)行代碼時再次請求這個對象的鎖杈曲,就可以直接得到這個對象的鎖。
當一個線程請求另一個線程持有的鎖時剪芥,該線程就會阻塞堤结,而該線程請求自己持有的鎖時旬陡,如果這個鎖是重入鎖,就請求成功锥忿,否則就阻塞虚吟。
一句話總結(jié):自己可以獲取自己內(nèi)部的鎖寸认。

可重入鎖的作用:最大限度的避免死鎖签财。

可重入鎖的其他特性:

  1. 父子可繼承性
  2. 出現(xiàn)異常時串慰,鎖自動釋放
  3. 單利模式-雙重校驗鎖

volatile 與 synchronized 的區(qū)別

volatile關鍵字的作用:強制從公共堆棧中取得變量的值,而不是從線程的私有數(shù)據(jù)棧中取得變量的值唱蒸。

  1. volatile是線程同步的輕量級實現(xiàn)邦鲫,性能比synchronized好,volatile只能修飾變量神汹,synchronized可以修飾代碼塊庆捺,方法等。
  2. 多線程訪問volatile不會阻塞屁魏,訪問synchronized會阻塞
  3. 可以保證數(shù)據(jù)的可見性滔以,但不可以保證原子性,而 synchronized 可以保證原子性氓拼,也可以間接保證可見性你画,因為他會將私有內(nèi)存和公共內(nèi)存中的數(shù)據(jù)做同步抵碟。不能保證原子性,就是不能保證線程安全坏匪。
  4. volatile 解決的是變量在多個線程之間的可見性拟逮,而 synchronized 解決的是多個線程之間訪問資源的同步性。

ThreadLocal 的介紹與使用

ThreadLocal概述

ThreadLocal的存在是為了解決每個線程都有自己的共享變量适滓,這個變量是線程私有的敦迄。

public class ThreadLocalDemo {
    public static ThreadLocal<List<String>> threadLocal = new ThreadLocal<>();
    
    public void setThreadLocal(List<String> values) {
        threadLocal.set(values);
    }
    
    public void getThreadLocal() {
        System.out.println(Thread.currentThread().getName());
        threadLocal.get().forEach(name -> System.out.println(name));
    }
    
    public static void main(String[] args) throws InterruptedException {

        final ThreadLocalDemo threadLocal = new ThreadLocalDemo();
        new Thread(() -> {
            List<String> params = new ArrayList<>(3);
            params.add("張三");
            params.add("李四");
            params.add("王五");
            threadLocal.setThreadLocal(params);
            threadLocal.getThreadLocal();
        }).start();

        new Thread(() -> {
            try {
                Thread.sleep(1000);
                List<String> params = new ArrayList<>(2);
                params.add("Chinese");
                params.add("English");
                threadLocal.setThreadLocal(params);
                threadLocal.getThreadLocal();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();
    }
}

上面的代碼中有一個靜態(tài)的threadLocal屬性,有兩個線程去同時訪問它凭迹,由于ThreadLocal 修飾罚屋,則不同的線程訪問的就是該線程設置的值。

當使用ThreadLocal維護變量時嗅绸,ThreadLocal為每個使用該變量的線程提供獨立的變量副本沿后,所以每一個線程都可以獨立地改變自己的副本,而不會影響其它線程所對應的副本朽砰。

ThreadLocal與Synchronized同步機制的比較

在同步機制中尖滚,通過Synchronized對象鎖,可以保證在同一時間只有一個線程訪問變量瞧柔。這個變量是多個線程之間共享的漆弄。
TreadLocal是線程的局部變量,是一種多線程間并發(fā)訪問變量的解決方案造锅。

ThreadLocal 完全不提供鎖撼唾,而使用以空間換時間的方式,為每個線程提供變量的獨立副本哥蔚,以保證線程的安全倒谷。

本文是http://gitbook.cn/gitchat/column/5a24fb14e3a13b7fc5933a44 gitChat線程課的學習總結(jié)筆記。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末糙箍,一起剝皮案震驚了整個濱河市渤愁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌深夯,老刑警劉巖抖格,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異咕晋,居然都是意外死亡雹拄,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門掌呜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來滓玖,“玉大人,你說我怎么就攤上這事质蕉∈拼郏” “怎么了损姜?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長殊霞。 經(jīng)常有香客問我摧阅,道長,這世上最難降的妖魔是什么绷蹲? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任棒卷,我火速辦了婚禮,結(jié)果婚禮上祝钢,老公的妹妹穿的比我還像新娘比规。我一直安慰自己,他們只是感情好拦英,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布蜒什。 她就那樣靜靜地躺著,像睡著了一般疤估。 火紅的嫁衣襯著肌膚如雪灾常。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天铃拇,我揣著相機與錄音钞瀑,去河邊找鬼。 笑死慷荔,一個胖子當著我的面吹牛雕什,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播显晶,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼贷岸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了磷雇?” 一聲冷哼從身側(cè)響起偿警,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎倦春,沒想到半個月后户敬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體落剪,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡睁本,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了忠怖。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呢堰。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖凡泣,靈堂內(nèi)的尸體忽然破棺而出枉疼,到底是詐尸還是另有隱情皮假,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布骂维,位于F島的核電站惹资,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏航闺。R本人自食惡果不足惜褪测,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望潦刃。 院中可真熱鬧侮措,春花似錦、人聲如沸乖杠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胧洒。三九已至畏吓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間卫漫,已是汗流浹背庵佣。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留汛兜,地道東北人巴粪。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像粥谬,于是被迫代替她去往敵國和親肛根。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348