日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

重新認識Java中的ThreadLocal

瀏覽:18日期:2022-08-11 15:35:30
目錄究竟是啥結構內存泄漏是什么鬼

說來也慚愧,這個 ThreadLocal 其實一直都是一知半解,而且看了一下之后還發現記錯了,所以還是記錄下原先記憶里的都是反過來,一個 ThreadLocal 是里面按照 thread 作為 key,存儲線程內容的,真的是半解都米有,完全是錯的,這樣就得用 concurrentHashMap 這種去存儲并且要鎖定線程了,然后內容也只能存一個了,想想簡直智障

究竟是啥結構

比如我們在代碼中 new 一個 ThreadLocal,

public static void main(String[] args) {ThreadLocal<Man> tl = new ThreadLocal<>();new Thread(() -> { try {TimeUnit.SECONDS.sleep(2); } catch (InterruptedException e) {e.printStackTrace(); } System.out.println(tl.get());}).start();new Thread(() -> { try {TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) {e.printStackTrace(); } tl.set(new Man());}).start(); } static class Man {String name = 'nick'; }

這里構造了兩個線程,一個先往里設值,一個后從里取,運行看下結果,

重新認識Java中的ThreadLocal

知道這個用法的話肯定知道是取不到值的,只是具體的原理原來搞錯了,我們來看下設值 set 方法

public void set(T value) { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null)map.set(this, value); elsecreateMap(t, value);}

寫博客這會我才明白我原來咋會錯得這么離譜,看到第一行代碼 t 就是當前線程,然后第二行就是用這個線程去getMap,然后我是把這個當成從 map 里取值了,其實這里是

ThreadLocalMap getMap(Thread t) { return t.threadLocals;}

獲取 t 的 threadLocals 成員變量,那這個 threadLocals 又是啥呢

重新認識Java中的ThreadLocal

它其實是線程 Thread 中的一個類型是java.lang.ThreadLocal.ThreadLocalMap的成員變量這是 ThreadLocal 的一個靜態成員變量

static class ThreadLocalMap {/** * The entries in this hash map extend WeakReference, using * its main ref field as the key (which is always a * ThreadLocal object). Note that null keys (i.e. entry.get() * == null) mean that the key is no longer referenced, so the * entry can be expunged from table. Such entries are referred to * as 'stale entries' in the code that follows. */static class Entry extends WeakReference<ThreadLocal<?>> { /** The value associated with this ThreadLocal. */ Object value; Entry(ThreadLocal<?> k, Object v) {super(k);value = v; }} }

全部代碼有點長,只截取了一小部分,然后我們再回頭來分析前面說的 set 過程,再 copy 下代碼

public void set(T value) { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null)map.set(this, value); elsecreateMap(t, value);}

獲取到 map 以后呢,如果 map 不為空,就往 map 里 set,這里注意 key 是啥,其實是當前這個 ThreadLocal,這里就比較明白了究竟是啥結構,每個線程都會維護自身的 ThreadLocalMap,它是線程的一個成員變量,當創建 ThreadLocal 的時候,進行設值的時候其實是往這個 map 里以 ThreadLocal 作為 key,往里設 value。

內存泄漏是什么鬼

這里又要看下前面的 ThreadLocalMap 結構了,類似 HashMap,它有個 Entry 結構,在設置的時候會先包裝成一個 Entry

private void set(ThreadLocal<?> key, Object value) {// We don’t use a fast path as with get() because it is at// least as common to use set() to create new entries as// it is to replace existing ones, in which case, a fast// path would fail more often than not.Entry[] tab = table;int len = tab.length;int i = key.threadLocalHashCode & (len-1);for (Entry e = tab[i]; e != null; e = tab[i = nextIndex(i, len)]) { ThreadLocal<?> k = e.get(); if (k == key) {e.value = value;return; } if (k == null) {replaceStaleEntry(key, value, i);return; }}tab[i] = new Entry(key, value);int sz = ++size;if (!cleanSomeSlots(i, sz) && sz >= threshold) rehash();}

這里其實比較重要的就是前面的 Entry 的構造方法,Entry 是個 WeakReference 的子類,然后在構造方法里可以看到 key 會被包裝成一個弱引用,這里為什么使用弱引用,其實是方便這個 key 被回收,如果前面的 ThreadLocal tl實例被設置成 null 了,如果這里是直接的強引用的話,就只能等到線程整個回收了,但是其實是弱引用也會有問題,主要是因為這個 value,如果在 ThreadLocal tl 被設置成 null 了,那么其實這個 value 就會沒法被訪問到,所以最好的操作還是在使用完了就 remove 掉

以上就是詳解Java中的ThreadLocal的詳細內容,更多關于Java ThreadLocal的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩中文av| 亚洲+小说+欧美+激情+另类| 少妇精品久久久一区二区| 久久伦理在线| 精品视频一区二区三区四区五区| 四虎成人精品一区二区免费网站| 免费人成精品欧美精品| 亚洲激情另类| 悠悠资源网久久精品| 亚洲精品中文字幕乱码| 国户精品久久久久久久久久久不卡| 欧美精品高清| 久久国产亚洲| 欧美精品九九| 爽爽淫人综合网网站| 日韩一区欧美二区| 亚洲日本免费电影| 日本成人在线一区| 欧美日韩黄网站| 国产美女精品视频免费播放软件| 91成人精品观看| 欧美精品aa| 久久久久久婷| 久久亚洲精品中文字幕蜜潮电影| 精精国产xxxx视频在线野外 | 一区二区三区视频免费观看| 久久国产欧美| 丝袜美腿亚洲色图| 日韩毛片网站| 免费一区二区三区在线视频| 精品网站999| 久久久亚洲一区| 亚洲一区二区三区高清不卡| 亚洲尤物在线| 日本欧美久久久久免费播放网| 国产日韩欧美一区二区三区在线观看| 精品久久一区| 99久久99久久精品国产片果冰| 国产精品老牛| 国产精品最新| av综合电影网站| 99日韩精品| 91成人小视频| 视频小说一区二区| 亚洲丝袜啪啪| 国产一区二区三区网| 一本一本久久| 你懂的亚洲视频| 国产网站在线| 国产视频一区免费看| 国产欧美精品| 久久国产中文字幕| 婷婷精品在线| 色偷偷色偷偷色偷偷在线视频| 日韩网站在线| 国产高清日韩| 国产一区亚洲| 日本成人在线一区| 日韩网站中文字幕| 午夜电影一区| 久久久国产精品一区二区中文| 蜜臀91精品一区二区三区| 久久精品一区二区三区中文字幕| 精品日韩视频| 欧美在线看片| 欧美精品一卡| 精品日韩一区| 蜜臀a∨国产成人精品| 亚洲涩涩在线| 欧美在线日韩| 在线亚洲成人| 精品视频一二| 日韩欧美2区| 1000部精品久久久久久久久| 日韩成人av影视| 狠狠干综合网| 国产aa精品| 日韩va欧美va亚洲va久久| 国产精品99一区二区三| 日本aⅴ免费视频一区二区三区| 999国产精品999久久久久久| 青草久久视频| 国产精品女主播一区二区三区 | 国产欧美日韩一区二区三区四区| 欧美 日韩 国产一区二区在线视频| 久久国产视频网| 美女久久久久| 久久精品免费看| 亚久久调教视频| 黄色日韩在线| 日韩电影免费在线观看| 国产欧美日韩精品一区二区免费| 99日韩精品| 日韩影院二区| 日韩在线观看一区二区三区| 日韩avvvv在线播放| 久久国产精品毛片| 国产剧情一区| 亚洲综合精品| 国产精品nxnn| 国产精品久久观看| 国产亚洲精品美女久久| 国产精品美女| 国产精品jk白丝蜜臀av小说| 免费在线观看一区| 91国内精品| 国产视频一区三区| 国模 一区 二区 三区| 亚洲午夜黄色| 日本久久黄色| 精品免费视频| 欧美少妇精品| 日韩高清不卡一区| 日韩国产高清在线| 婷婷激情一区| 99视频一区| 国产精品一区二区精品视频观看| 久久97久久97精品免视看秋霞| 亚洲精品一区三区三区在线观看| 国产欧美一区二区三区国产幕精品 | 91综合视频| 国产一区二区三区不卡视频网站| 日本在线视频一区二区| 欧美日韩色图| 日韩不卡在线| 牛牛精品成人免费视频| 国产精品久久久久久妇女| 美女网站久久| 久久久水蜜桃av免费网站| 成人在线视频区| 高清av一区| 国产精品777777在线播放| 国产精品免费不| 日韩精选在线| 91精品国产自产观看在线| 性色av一区二区怡红| 免费不卡在线视频| 久久亚洲图片| 日韩精品免费一区二区夜夜嗨 | 91亚洲自偷观看高清| 嫩呦国产一区二区三区av| 卡一卡二国产精品| 亚洲精品一级| 国产一区亚洲| 丝袜美腿亚洲色图| 中国女人久久久| 日产欧产美韩系列久久99| 免费成人性网站| 国产一区视频在线观看免费| 国产精品99免费看| 亚洲一区二区三区四区五区午夜| 久久中文视频| 婷婷中文字幕一区| 久久在线电影| 99久久夜色精品国产亚洲1000部| 夜久久久久久| 天使萌一区二区三区免费观看| 欧美+日本+国产+在线a∨观看| 久久一区二区三区电影| 亚洲综合欧美| 亚洲精品影视| 国产精品久久久久av蜜臀 | 欧美日韩在线播放视频| 欧美日韩精品一本二本三本| 91精品福利| 日本不卡在线视频| 国产亚洲欧美日韩精品一区二区三区 | 亚洲午夜免费| 国产剧情在线观看一区| 久久精品网址| 欧美日韩视频| 亚欧成人精品| 国产中文在线播放| 日韩中文在线电影| 免费在线观看一区二区三区| 日韩视频1区| 三上亚洲一区二区| 亚洲午夜黄色| 国产日韩精品视频一区二区三区| 国产精品网在线观看| 欧美sss在线视频| 欧美一级专区| 久久精品伊人| 欧美在线观看视频一区| 日本亚洲最大的色成网站www| 国产欧美日韩在线一区二区| 日韩一区二区三区免费播放| 亚洲激精日韩激精欧美精品| 日本成人在线一区| 美女视频网站久久| 久久在线电影| 国产精品草草| 91福利精品在线观看| 麻豆视频在线看| 国产精品一区二区三区www| 老司机精品久久| 亚洲精品在线国产| 国产福利91精品一区二区| 免费欧美一区| 欧美日韩 国产精品|