精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

ThreadLocal源碼解讀:初識ThreadLocal

開發 前端
在實踐中想要利用這個方法,必須對 ThreadLocal 進行子類化,并重寫此方法。通常有兩種方式,其中一種是開篇的 javadoc 中使用的匿名內部類寫法。


從類的javadoc出發

想要深度了解一個類可以從 javadoc 出發,這里可藏著不少好東西,下面讓我來帶大家盤一盤 ThreadLocal 的 javadoc!

圖片圖片

從區域①可以看出 ThreadLocal 的用途:提供了線程緯度的局部變量。通俗來講就是每一個線程操作自己的局部變量,線程之間互不干擾。

通過這段描述我們還可以發現官方是建議我們將 ThreadLocal 用作類中私有的靜態成員變量。

區域②是官方為我們提供了一個小 demo,模擬了為每個線程生成線程 id 的場景,并且這個 id 在第一次調用 ThreadId.get 時被分配,并在后續調用中保持不變。

可以看到這個 demo 中將 ThreadLocal 對象使用 private static final 修飾,這也正是官方所建議的。

區域③官方著重強調了局部變量與線程的關系,一旦線程銷毀,局部變量也會被垃圾回收器回收掉。

常用API分析

局部變量是如何存儲的?為何又會隨著線程的銷毀而銷毀?在這個過程中 ThreadLocal 又充當著怎樣的角色?源碼之下沒有秘密!

圖片圖片

通過 idea 側邊欄提供的 Structure 模塊可以看出 ThreadLocal 類中的方法并不多,在使用中可以用到的也就圈出來的這幾個。

我們將這幾個方法玩明白,上面的問題也就迎刃而解了。

initialValue方法

首先我們看一下 initialValue 方法。

圖片圖片

通過源碼我們可以看出這個方法的訪問修飾符被設置為了 protected 類型的,意味著這個方法只能被同包及其子類訪問,并且這個方法的實現是直接返回了 null,可以推斷出這個方法應該是用作模板方法(鉤子函數),并且結合方法名可以判斷出這個方法作用是初始化值。

而這一切在方法的 javadoc 都有所描述,所以在看源碼的時候一定不可以忽略 javadoc,這里含有大量有用信息,即使使用翻譯軟件也一定要含淚看完。

在實踐中想要利用這個方法,必須對 ThreadLocal 進行子類化,并重寫此方法。通常有兩種方式,其中一種是開篇的 javadoc 中使用的匿名內部類寫法。

圖片圖片

而匿名內部類寫法,可以用 ThreadLocal 提供的 withInitial 方法進行等效替換,個人更傾向于使用 withInitial 配合 lambda 表達式的寫法,可以使得代碼更加簡潔清晰。

private static final ThreadLocal<Integer> threadId = ThreadLocal.withInitial(() -> nextId. getAndIncrement());

private static final ThreadLocal<Integer> threadId = ThreadLocal.withInitial(nextId::getAndIncrement);

那么 initialValue 方法將在什么時候調用呢?先給出結論:在當前線程對象中以 ThreadLocal 對象為 key 的局部變量值不存在時,調用 get 請求將會觸發初始化邏輯。

get方法

下面我們來看一下 get 方法,通過分析 get 方法我們就可以知道局部變量是如何存儲的。

圖片圖片

從源碼中可以看到首先是獲取當前的線程對象,然后通過 getMap 方法傳入當前 Thread 對象獲取到了一個 ThreadLocalMap 對象 map。

并判斷當前 map 是否為 null,如果不為 null 則調用 map 的 getEntry 方法,并且傳入了 this 對象,在此刻 this 對象就是 ThreadLocal 對象。

getEntry 方法返回了 Entry 對象 e,如果 e 不為 null 則返回 e 的 value 成員變量,并將其轉換為我們定義好的泛型 T 進行返回。這里的 e.value 就是我們所說的局部變量。

圖片圖片

我們來看一下 Entry 類的定義,通過源碼可以看出 Entry 類繼承了 WeakReference,并將引用字段作為鍵(始終是 ThreadLocal 對象),value 則定義為 Object 類型。關于弱引用問題將在下一期分析內存泄露問題時進行展開討論。

如果 map 為 null 或者對象 e 為 null,都將調用 setInitialValue 方法進行初始化,而 setInitialValue 方法將會調用上述我們重寫的 initialValue 方法獲取局部變量的值,進行初始化操作。

圖片圖片

此時我們已經可以確定局部變量存儲在 ThreadLocalMap 對象中。那么 ThreadLocalMap 對象又從何獲取的呢,通過點進 getMap 方法源碼(如下圖)我們可以發現,ThreadLocalMap 是 Thread 類的成員變量,也就是說存儲在 Thread 對象中。

圖片圖片

點進 Thread 源碼(如下圖)我們就可以看到類型為 ThreadLocalMap 的成員變量 threadLocals,并且它的初始值是 null。

圖片圖片

那么在這個過程中 ThreadLocal 對象充當了什么樣的角色呢?其實 ThreadLocal 對象的作用就相當于 HashMap 中 key 的作用。我們點進以 ThreadLocal 對象作為參數的 getEntry 方法,進行進一步的分析。

圖片圖片

通過 Entry e = table[i]我們發現 Entry 對象取自 table 這個數組,而數組 table 是 ThreadLocalMap 的類的成員變量。

圖片圖片

數組坐標 i 通過表達式key.threadLocalHashCode & (table.length - 1)計算而來,這個表達式在 table.length 是 2 的冪次方時等同于key.threadLocalHashCode % table.length操作,具體論證的過程大家可以百度一下。

如果通過坐標 i 獲取的 Entry 對象的 key 和當前的 ThreadLocal 對象相等,則證明當前 Entry 對象確實是存儲了當前線程當前 ThreadLocal 對象的局部變量。

如果不等,說明發生了哈希沖突,則調用 getEntryAfterMiss 方法繼續搜索,直到搜索到當前 ThreadLocal 對象對應的 Entry,或者未搜索到返回 null。

圖片圖片

在 getEntryAfterMiss 方法中,我們可以看到搜索的過程中調用了 nextIndex 方法進行獲取下一次搜索的索引,nextIndex 方法的邏輯很簡單就是對 i 進行遞增,如果等于了容量值 len 則從 0 繼續遍歷。

圖片圖片

通過搜索邏輯我們可以推斷出 ThreadLocalMap 解決哈希沖突采用的是線性探測法,而 HashMap 在碰到哈希沖突時采用的是拉鏈法,這一點要區別記憶。

此時我們已經可以抽離出一條引用鏈 Thread->ThreadLocalMap->Entry[]->Entry->value(局部變量),在這條引用鏈上都是強引用。

我們再來分析一下為何局部變量為什么會隨著線程的銷毀而銷毀呢?

JVM 垃圾回收機制默認采取的是可達性分析算法。在這條強引用鏈中除了 value 調用鏈中的其他引用都是當前對象的唯一引用。

一旦這條引用鏈的根 Thread 對象被回收,那么其他對象都將不可達,都將被垃圾回收器所回收。

而局部變量如果沒有被其他對象所引用也將不可達,從而被銷毀。

set方法

下面我們來看一下 set 方法的源碼,比較有意思的是,竟然和 setInitialValue 方法中的一段邏輯一毛一樣,不知道編寫時為什么沒有在 setInitialValue 方法中直接調用 set 方法。

圖片圖片

set 方法在執行時根據 ThreadLocalMap 對象是否為 null,分別進行賦值及初始化兩種不同處理邏輯。

這里我們先看一下 ThreadLocalMap 對象為 null 時的 createMap 方法的邏輯,這樣更有助我們理解。

圖片圖片

在 createMap 方法內部調用了 ThreadLocalMap 兩個參數的構造函數,并將返回的對象賦值給了當前線程對象的成員變量 threadLocals。

我們查看 ThreadLocalMap 的構造方法可以發現很多關鍵信息。

圖片圖片

其中 ThreadLocalMap 的初始容量被設置為了 16。

圖片圖片

并且在構造方法的最后調用了 setThreshold 方法,該方法用于設置擴容的閾值,這個閾值為當前容量的 2 / 3。

圖片圖片

當 ThreadLocalMap 對象不為 null 時將會調用 ThreadLocalMap 的 set 方法。

圖片圖片

從方法中我們可以看出,首先依舊是根據 ThreadLocal 對象計算出索引 i,然后根據當前索引值獲取 Entry 對象。

如果 Entry 對象不為 null 則會進行下列幾種判斷,如果 key 是當前 ThreadLocal 對象,則將舊值替換掉。

如果當前 key 為 null,則說明當前 Entry 對象已經過時,則調用替換過時 Entry 的 replaceStaleEntry 方法,這個方法將在下一期進行展開討論。

如果 key 不為 null 且不等于當前 ThreadLocal 對象則進行下一輪遍歷。

如果上述邏輯未能找到當前 ThreadLocal 對象對應的 Entry 對象,且在這個過程中沒有過時的 Entry 對象供替換,則生成一個新的 Entry 對象放置在當前索引 i 位置(經過上述遍歷索引 i 已經定位在了一個 Entry 對象為 null 的位置)。

最后再根據!cleanSomeSlots(i, sz) && sz >= threshold判斷一下是否需要進行擴容操作。

其中 cleanSomeSlots 方法的作用是向下執行有限次數的掃描,看看有沒有過時的 Entry 對象可供清理,如果清理了任何個數 Entry 對象將返回 true,則此時一定不需要擴容,如果沒有清理任何 Entry 對象則需要判斷一下當前 ThreadLocalMap 的大小是否達到了擴容閾值。

remove方法

最后我們來看一下 remove 方法,remove 方法的作用是刪除當前線程以當前 ThreadLocal 對象為 key 的局部變量值。

圖片圖片

通過源碼我們可以看出 ThreadLocal 的 remove 方法的核心邏輯是調用了 ThreadLocalMap 的 remove 方法。

圖片圖片

ThreadLocalMap 的 remove 方法的邏輯也很清晰,根據 ThreadLocal 對象搜索對應的 Entry 對象,如果搜索到則將 Entry 對象通過 Reference 的 clear 方法設置為過時,最后調用 expungeStaleEntry 方法將過時的 Entry 條目進行清理,expungeStaleEntry 也將在下一期進行展開討論。

總結

最后我們再來簡單總結一下,首先每一個線程對象中都存儲了一個 ThreadLocalMap 對象,ThreadLocalMap 對象以 ThreadLocal 對象作為 key 存儲值,這個值就是我們所說的局部變量。

但是在設計的過程中并沒有直接暴露給我們操作 ThreadLocalMap 的 API,所以在這個過程中我們需要 ThreadLocal 對象作為橋梁,ThreadLocal 類包含 initialValue、get、set、remove 方法。

其中 initialValue 方法用于提供初始化 ThreadLocalMap 對象中以當前 ThreadLocal 對象為 key 的局部變量的值。

get 方法用于獲取當前線程以當前 ThreadLocal 對象為 key 的局部變量,如果當前局部變量的未初始化,則使用 initialValue 返回的值作為局部變量的值進行初始化操作。

set 方法用于為當前線程以當前 ThreadLocal 對象為 key 的局部變量設置值,新值將會覆蓋舊值。

remove 方法用于刪除當前線程以當前 ThreadLocal 對象為 key 的局部變量值。

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2024-10-31 09:24:42

2022-08-26 07:33:49

內存JVMEntry

2024-11-18 16:15:00

2018-04-09 08:17:36

線程ThreadLocal數據

2025-06-27 07:19:48

2011-07-14 13:50:09

ThreadLocal

2009-09-29 17:11:23

Hibernate T

2015-09-09 08:45:49

JavaThreadLocal

2021-01-19 05:24:36

ThreadLocal線程編程

2023-10-07 08:26:40

多線程數據傳遞數據共享

2021-05-06 08:55:24

ThreadLocal多線程多線程并發安全

2022-05-11 07:36:12

Java線程安全

2023-08-02 08:54:58

Java弱引用鏈表

2022-10-25 10:20:31

線程變量原理

2022-05-14 21:19:22

ThreadLocaJDKsynchroniz

2023-11-02 08:27:29

2021-03-28 23:37:35

線程專屬變量

2011-07-14 14:15:40

ThreadLocal

2021-04-23 20:59:02

ThreadLocal內存

2023-11-28 12:25:02

多線程安全
點贊
收藏

51CTO技術棧公眾號

国产精品99久久精品| 3d性欧美动漫精品xxxx软件| 国产精品正在播放| 午夜精品一区二区三区在线视频 | 国产va亚洲va在线va| 天堂av手机版| 另类综合日韩欧美亚洲| 久久久久久久久国产| 微拍福利一区二区| 91精品久久久久久综合五月天| 欧美性猛交xxxx乱大交| 日韩最新中文字幕| 男人天堂综合| 国产高清在线精品| 国产免费一区二区三区在线观看 | 中文字幕一区二区人妻在线不卡 | 午夜在线播放视频欧美| 操91在线视频| 亚洲第一视频区| 欧美黑人巨大videos精品| 欧美在线免费观看视频| 男人天堂新网址| 欧美日韩xx| 久久精品亚洲国产奇米99| 国产在线日韩在线| 国产熟妇一区二区三区四区| 亚洲午夜一区| 欧美成年人视频网站欧美| 精品熟妇无码av免费久久| 麻豆一区二区麻豆免费观看| 日韩欧美成人激情| 日本免费色视频| 中文字幕一区久| 午夜激情一区二区三区| 伊人再见免费在线观看高清版 | 国产日产精品_国产精品毛片| 精品少妇一区二区三区免费观看 | 国产亚洲精品超碰| 久久日韩精品| 蜜桃av噜噜一区二区三区麻豆| 精品无人码麻豆乱码1区2区| 国产精品极品尤物在线观看| 日本韩国欧美中文字幕| 亚洲毛片视频| 亚洲91av视频| 日产精品久久久| 99视频在线精品国自产拍免费观看| 欧美日韩不卡合集视频| 暗呦丨小u女国产精品| 欧美gayvideo| 久久精品视频导航| √天堂中文官网8在线| 外国成人免费视频| 久久视频精品在线| 国产高潮国产高潮久久久91 | 久久久91精品国产一区二区精品 | 97精品视频| 色偷偷噜噜噜亚洲男人| 久久久精品少妇| 亚洲澳门在线| 欧美大片欧美激情性色a∨久久| 97在线观看视频免费| 91精品国产乱码久久久久久| 美女视频黄免费的亚洲男人天堂| 很污很黄的网站| 亚洲va在线| 久久久久久久999| 1级黄色大片儿| 久久午夜精品一区二区| 国产精品男人爽免费视频1| 91高潮大合集爽到抽搐| 国产精品自拍网站| 国产亚洲福利社区| 免费福利在线观看| 国产精品天干天干在线综合| 天天综合中文字幕| 日韩伦理电影网站| 懂色aⅴ精品一区二区三区蜜月 | 精品无码黑人又粗又大又长| 影音先锋久久久| 日本久久久久久久久久久| 最新在线中文字幕| 国产美女视频91| 国产乱码精品一区二区三区不卡| 免费在线性爱视频| 亚洲欧美综合在线精品| 欧美一级片免费播放| 婷婷综合六月| 日韩一区二区影院| 中文人妻一区二区三区| 欧美gay男男猛男无套| 午夜精品福利视频| 91久久久久久久久久久久| 粉嫩av一区二区三区| 欧美日本亚洲| 菠萝蜜视频国产在线播放| 欧美日韩在线视频一区二区| 亚洲一区日韩精品| 欧美大奶一区二区| 久久久精品电影| 久久国产黄色片| 国产在线精品一区二区三区不卡| 黑人另类av| 黄色成人影院| 色婷婷综合激情| 少妇献身老头系列| 波多野结衣一区| 久久久中精品2020中文| 这里只有精品6| 97aⅴ精品视频一二三区| 在线观看免费91| 中国色在线日|韩| 日韩久久精品一区| 成人性视频免费看| 国产欧美一区二区三区国产幕精品| 国产日韩中文字幕| 久草在线青青草| 亚洲成人久久影院| 亚洲综合在线一区二区| 精品国产一级毛片| 7777精品视频| 亚洲成熟女性毛茸茸| 国产精品毛片高清在线完整版| 日本丰满少妇xxxx| 日本一区二区乱| 久久精品在线视频| 中文字幕人妻互换av久久| www国产精品av| 男人天堂手机在线视频| 欧美.com| 美日韩精品视频免费看| 一级久久久久久久| 国产欧美日本一区二区三区| 黄在线观看网站| 美女网站色精品尤物极品姐弟| 九九久久国产精品| jizz中国少妇| 亚洲人成小说网站色在线| 五月天激情视频在线观看| 国产欧美日韩在线观看视频| 国产成+人+综合+亚洲欧美丁香花| 午夜成人免费影院| 香蕉成人啪国产精品视频综合网 | 久久久久亚洲蜜桃| 波多野结衣家庭教师在线| 国产精品xxx在线观看| 欧美国产日产韩国视频| 午夜精品久久久久久久99| 亚洲欧美日韩系列| 亚洲女人在线观看| 一区二区三区四区在线观看国产日韩 | 国产精品夜夜夜爽阿娇| 蜜臀久久99精品久久久久久9 | 酒色婷婷桃色成人免费av网| 色婷婷精品大在线视频| 国产ts在线播放| 天堂va蜜桃一区二区三区| 日韩精品av一区二区三区| 午夜无码国产理论在线| 在线看日韩欧美| 怡春院在线视频| 亚洲欧美日韩一区二区三区在线观看| 亚洲国产午夜精品| 亚洲二区视频| 欧美激情一区二区三区在线视频 | 欧美日韩一区三区四区| 看黄色录像一级片| 国产乱码精品一区二区三区忘忧草| 7777精品伊人久久久大香线蕉的 | 成年人午夜视频在线观看| 成人看片爽爽爽| 色美美综合视频| 久久视频免费观看| 亚洲大尺度视频| 日韩欧美在线观看| 在线看片中文字幕| 国产在线一区观看| 一本色道久久99精品综合| 午夜视频在线观看精品中文| 欧美日韩精品欧美日韩精品一综合| 国产女主播喷水高潮网红在线| 蜜桃视频一区二区三区| 国产精品8888| 亚洲精华一区二区三区| 日韩欧美在线网站| 日本一区二区三区四区五区| 蜜臀av亚洲一区中文字幕| 中文字幕免费高| 成人a在线视频免费观看| 欧洲av一区二区嗯嗯嗯啊| av在线播放中文字幕| 东方欧美亚洲色图在线| 18成人在线| 国产视频中文字幕在线观看| 亚洲第一区中文99精品| 亚洲熟妇无码av| 99riav1国产精品视频| 人人爽久久涩噜噜噜网站| 后入内射欧美99二区视频| 日韩欧美在线观看视频| 毛葺葺老太做受视频| 国产日产精品_国产精品毛片| 亚洲精品国产福利| 国产ts在线播放| 美国一区二区三区在线播放 | 亚洲激情女人| 波多野结衣成人在线| 欧美人xxx| 18成人在线视频| 亚洲午夜精品17c| 最近免费中文字幕中文高清百度| 国产欧美久久久久久久久| 亚洲人成电影网站色mp4| 国产精品中出一区二区三区| 51漫画成人app入口| 99久久精品国产精品久久| 日韩av手机在线观看| 亚洲国产第一区| 国产精品一区hongkong| 日韩—二三区免费观看av| 久热精品视频在线免费观看| 国产一区二区三区小说| 日韩在线影院| 欧美在线视频观看免费网站| 日本高清成人vr专区| 日韩资源在线观看| 成a人片在线观看www视频| 日韩av综合网站| 黄色小视频免费在线观看| 欧美一级在线视频| 国产乱叫456在线| 欧美精品乱码久久久久久按摩| 国产一级片免费在线观看| 欧美日韩视频免费播放| 日本中文字幕免费观看| 一区二区三区在线观看动漫| 夫妻性生活毛片| 国产精品久久久久久久岛一牛影视| 色欲AV无码精品一区二区久久| 26uuu精品一区二区| 亚洲精品视频大全| 久久综合网色—综合色88| 国产黄色三级网站| www.成人在线| 久久无码人妻精品一区二区三区| 成人av网在线| 中文字幕一区二区三区人妻| 久久亚洲精品国产精品紫薇 | 91免费视频观看| 亚洲综合自拍网| 久久亚洲综合av| av女人的天堂| 国产精品区一区二区三区| 欧美美女性生活视频| 最新不卡av在线| 精品爆乳一区二区三区无码av| 亚洲午夜羞羞片| 久久午夜免费视频| 日韩欧美999| 人妻中文字幕一区二区三区| 欧美日韩国产精品成人| 国产精品自产拍| 精品少妇一区二区三区视频免付费| 亚洲精品一区二区三区不卡| 亚洲国产精品系列| 国产在线视频资源| 久久久精品久久久久| 亚洲卡一卡二| 91av在线视频观看| 国产精品天堂蜜av在线播放| 亚洲一区二区三区久久 | 精品一区二区三区香蕉蜜桃 | 亚洲性在线观看| 欧美一级二级三级蜜桃| 四虎免费在线观看| 一本大道久久加勒比香蕉| 国产精品剧情| 欧美极品欧美精品欧美视频 | 国产美女精品视频| 91在线一区| 日本中文不卡| 欧美日韩国产一区精品一区| 亚洲乱码中文字幕久久孕妇黑人| 男女男精品视频网| 农村末发育av片一区二区| 久久九九全国免费| 成人性生活毛片| 欧美视频二区36p| 国产精品视频久久久久久| 亚洲精品国产电影| 黄网址在线观看| 欧洲中文字幕国产精品| 韩国三级成人在线| 久久综合九色综合久99| 香蕉精品视频在线观看| 日本成人在线免费视频| 国产精品亚洲午夜一区二区三区| 成人免费av片| 亚洲一区二区三区四区五区黄| 波多野结衣二区三区| 亚洲第一网站免费视频| 免费在线看黄色| 国产97在线观看| 国内精品偷拍| 在线视频91| 久久蜜桃精品| 精品熟女一区二区三区| 最新国产の精品合集bt伙计| 国产污视频网站| 亚洲国产成人精品电影| www免费在线观看| 国产精品久久久久久久久免费| 麻豆一区二区| 99在线观看视频免费| 九九国产精品视频| 永久免费毛片在线观看| 欧美日韩国产中文字幕| 亚洲黄色片视频| 超碰97人人做人人爱少妇| jizz亚洲女人高潮大叫| 欧美一区二区三区四区五区六区| 一区免费在线| 韩国三级在线看| 亚洲免费看黄网站| 97国产精品久久久| 在线丨暗呦小u女国产精品| 美女福利一区二区| 久久久久久久久久久久久久一区| 激情婷婷欧美| 麻豆tv在线观看| 夜夜精品浪潮av一区二区三区| 国产麻豆一精品一男同| 日韩小视频在线观看| 成人久久网站| 亚洲福利av| 麻豆精品久久久| 亚洲一级片在线播放| 91福利在线播放| 国产黄色在线播放| 日韩免费精品视频| 精品成av人一区二区三区| 已婚少妇美妙人妻系列| 久久久久久久久久久黄色| 男人天堂2024| 亚洲视频在线看| 99精品在免费线偷拍| 亚洲欧美精品| 极品少妇xxxx偷拍精品少妇| 波多野结衣在线网址| 日韩三级高清在线| 暧暧视频在线免费观看| 国产欧美日韩一区| 老鸭窝毛片一区二区三区| 国精产品一区一区三区免费视频| 欧美日韩一二三四五区| 久久久久久女乱国产| 国产精品久久久久久亚洲影视| 日韩欧美不卡| 97人人爽人人| 一区二区三区产品免费精品久久75| 亚洲精品一区二区三区四区| 91超碰caoporn97人人| 精品国产乱码久久久久久蜜坠欲下| 亚州精品一二三区| 中文字幕佐山爱一区二区免费| 成人激情四射网| 日韩av大片在线| 91高清一区| 在线看黄色的网站| 日本久久一区二区三区| 精品视频在线一区二区| 国产精品国产精品国产专区蜜臀ah | 久久影院资源网| 成人av综合网| www日韩在线观看| 18成人在线观看| 免费激情视频网站| 国产成人精品视频| 亚洲一区二区三区| 中国极品少妇videossexhd| 欧美综合天天夜夜久久| 在线观看操人| 欧美高清视频一区二区三区在线观看| 久久99国产精品免费| av资源吧首页| 最近2019好看的中文字幕免费| 99久久人爽人人添人人澡| 北条麻妃在线视频| 一区二区三区国产| 高清美女视频一区| 国产精品亚洲不卡a| 男女性色大片免费观看一区二区| 久久久久成人片免费观看蜜芽| 亚洲欧洲第一视频| 亚洲综合影院| 亚洲国产日韩欧美在线观看| 亚洲大片精品永久免费| 久久77777| 欧美一区二区视频17c| 国产成人久久精品77777最新版本|