知識(shí)點(diǎn)撿漏

1.ThreadLocal的數(shù)據(jù)結(jié)構(gòu),為什么要用static final 修飾ThreadLocal璃赡?

ThreadLocal結(jié)構(gòu)
某個(gè)threadlocal在全局是唯一的晓猛,并且存取的時(shí)候threadlocal只是作為Threadlocalmap下的一個(gè)key租幕,所以用static final修飾可以避免發(fā)生資源浪費(fèi)
    1凉敲、每個(gè)Thread對(duì)象內(nèi)部都維護(hù)了一個(gè)ThreadLocalMap這樣一個(gè)ThreadLocal的Map,可以存放若干個(gè)ThreadLocal捅彻。

/* ThreadLocal values pertaining to this thread. This map is maintained
 * by the ThreadLocal class. */
ThreadLocal.ThreadLocalMap threadLocals = null;
    2组去、當(dāng)我們?cè)谡{(diào)用get()方法的時(shí)候,先獲取當(dāng)前線程沟饥,然后獲取到當(dāng)前線程的ThreadLocalMap對(duì)象添怔,如果非空湾戳,那么取出ThreadLocal的value贤旷,否則進(jìn)行初始化,初始化就是將initialValue的值set到ThreadLocal中砾脑。


public T get() {
    Thread t = Thread.currentThread();
    ThreadLocalMap map = getMap(t);
    if (map != null) {
        ThreadLocalMap.Entry e = map.getEntry(this);
        if (e != null)
            return (T)e.value;
    }
    return setInitialValue();
}

 
    public void set(T value) {
        Thread t = Thread.currentThread();
        ThreadLocalMap map = getMap(t);
        if (map != null)
            map.set(this, value);
        else
            createMap(t, value);
    }
  3幼驶、當(dāng)我們調(diào)用set()方法的時(shí)候,很常規(guī)韧衣,就是將值設(shè)置進(jìn)ThreadLocal中盅藻。

  4、總結(jié):當(dāng)我們調(diào)用get方法的時(shí)候畅铭,其實(shí)每個(gè)當(dāng)前線程中都有一個(gè)ThreadLocal氏淑。每次獲取或者設(shè)置都是對(duì)該ThreadLocal進(jìn)行的操作,是與其他線程分開的硕噩。

  5假残、應(yīng)用場(chǎng)景:當(dāng)很多線程需要多次使用同一個(gè)對(duì)象,并且需要該對(duì)象具有相同初始化值的時(shí)候最適合使用ThreadLocal。

  6辉懒、其實(shí)說再多也不如看一下源碼來得清晰阳惹。如果要看源碼,其中涉及到一個(gè)WeakReference和一個(gè)Map眶俩,這兩個(gè)地方需要了解下莹汤,這兩個(gè)東西分別是a.Java的弱引用,也就是GC的時(shí)候會(huì)銷毀該引用所包裹(引用)的對(duì)象颠印,這個(gè)threadLocal作為key可能被銷毀纲岭,但是只要我們定義成他的類不卸載,tl這個(gè)強(qiáng)引用就始終引用著這個(gè)ThreadLocal的线罕,永遠(yuǎn)不會(huì)被gc掉荒勇。b.和HashMap差不多。

  事實(shí)上闻坚,從本質(zhì)來講沽翔,就是每個(gè)線程都維護(hù)了一個(gè)map,而這個(gè)map的key就是threadLocal窿凤,而值就是我們set的那個(gè)值仅偎,每次線程在get的時(shí)候,都從自己的變量中取值雳殊,既然從自己的變量中取值橘沥,那肯定就不存在線程安全問題,總體來講夯秃,ThreadLocal這個(gè)變量的狀態(tài)根本沒有發(fā)生變化座咆,他僅僅是充當(dāng)一個(gè)key的角色,另外提供給每一個(gè)線程一個(gè)初始值仓洼。如果允許的話介陶,我們自己就能實(shí)現(xiàn)一個(gè)這樣的功能,只不過恰好JDK就已經(jīng)幫我們做了這個(gè)事情色建。

2.重寫equals為什么要重寫hashCode()?

首先哺呜,從Object的源碼入手:
/**
     * The {@code equals} method for class {@code Object} implements
     * the most discriminating possible equivalence relation on objects;
     * that is, for any non-null reference values {@code x} and
     * {@code y}, this method returns {@code true} if and only
     * if {@code x} and {@code y} refer to the same object
     * ({@code x == y} has the value {@code true}).
     * <p>
     * Note that it is generally necessary to override the {@code hashCode}
     * method whenever this method is overridden, so as to maintain the
     * general contract for the {@code hashCode} method, which states
     * that equal objects must have equal hash codes.
**/
 public boolean equals(Object obj) {
        //equals默認(rèn)比較的是句柄的內(nèi)存引用地址
        return (this == obj);
 }

  /**
  * hashcode方法是一個(gè)native方法,默認(rèn)返回引用地址
  **/
  public native int hashCode();

根據(jù)源碼注釋不難發(fā)現(xiàn)箕戳,equals必須遵從對(duì)等原則某残,x.equals(y) ==true 則
y.equals(x)==true,同時(shí)若復(fù)寫equals陵吸,則不需復(fù)寫hashcode玻墅。原因是:
若x.equals(y) ==true,則x.hashcode() == y.hashcode();

可以說這是一種原則上的規(guī)范壮虫;

一致性哈希

一致性hash傳送門

java線程狀態(tài)切換

java線程狀態(tài)切換

synchronized 和 Lock 區(qū)別

傳送門

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末澳厢,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赏酥,老刑警劉巖喳整,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異裸扶,居然都是意外死亡框都,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門呵晨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來魏保,“玉大人,你說我怎么就攤上這事摸屠∥铰蓿” “怎么了?”我有些...
    開封第一講書人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵季二,是天一觀的道長檩咱。 經(jīng)常有香客問我,道長胯舷,這世上最難降的妖魔是什么刻蚯? 我笑而不...
    開封第一講書人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮桑嘶,結(jié)果婚禮上炊汹,老公的妹妹穿的比我還像新娘。我一直安慰自己逃顶,他們只是感情好讨便,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著以政,像睡著了一般霸褒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上妙蔗,一...
    開封第一講書人閱讀 52,713評(píng)論 1 312
  • 那天傲霸,我揣著相機(jī)與錄音,去河邊找鬼眉反。 笑死,一個(gè)胖子當(dāng)著我的面吹牛穆役,可吹牛的內(nèi)容都是我干的寸五。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼耿币,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼梳杏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤十性,失蹤者是張志新(化名)和其女友劉穎叛溢,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體劲适,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡楷掉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了霞势。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烹植。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖愕贡,靈堂內(nèi)的尸體忽然破棺而出草雕,到底是詐尸還是另有隱情,我是刑警寧澤固以,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布墩虹,位于F島的核電站,受9級(jí)特大地震影響憨琳,放射性物質(zhì)發(fā)生泄漏败晴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一栽渴、第九天 我趴在偏房一處隱蔽的房頂上張望尖坤。 院中可真熱鬧,春花似錦闲擦、人聲如沸慢味。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纯路。三九已至,卻和暖如春寞忿,著一層夾襖步出監(jiān)牢的瞬間驰唬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來泰國打工腔彰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留叫编,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓霹抛,卻偏偏與公主長得像搓逾,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子杯拐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

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

  • 面試必背 會(huì)舍棄霞篡、總結(jié)概括——根據(jù)我這些年面試和看面試題搜集過來的知識(shí)點(diǎn)匯總而來 建議根據(jù)我的寫的面試應(yīng)對(duì)思路中的...
    luoyangzk閱讀 6,763評(píng)論 6 173
  • Overriding the equals method seems simple, but there are ...
    MrDcheng閱讀 702評(píng)論 0 0
  • 人生如夢(mèng)世蔗,其實(shí)無關(guān)對(duì)錯(cuò)。 畢竟就夢(mèng)一場(chǎng)朗兵,每個(gè)人都一樣污淋,沉睡地多長夢(mèng)就多長。富翁與乞丐都是同一樣的時(shí)間余掖,其實(shí)都只是追...
    meet_again閱讀 191評(píng)論 0 0
  • 今天讀了《人本教練》激情篇寸爆。讓我感觸頗深一個(gè)人一定要活出激情∽抢簦活出自我的價(jià)值而昨!引用書中的一句話,沒有激情的人就像一...
    Sky云霄閱讀 452評(píng)論 0 0
  • 那是系著牽掛常常的線 縫的是我最愛的那一件 就在窗下那盞昏黃的燈前 媽媽一針針仔細(xì)地連 不論是在眼前還是天邊 我也...
    由來已久yang閱讀 254評(píng)論 0 0