精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

色综合一个色综合亚洲| 亚洲日韩视频| 欧美丰满少妇xxxxx高潮对白| 四虎一区二区| www.亚洲天堂.com| 午夜影院日韩| 欧美日韩国产一区二区三区| 亚洲精品不卡在线| 成年人黄色片视频| 蜜桃视频网站在线| 婷婷丁香花五月天| 日韩成人免费电影| 欧美日韩国产第一页| 国产在线观看无码免费视频| 久久三级毛片| 舔着乳尖日韩一区| 在线观看欧美激情| 日本视频在线观看一区二区三区| 久88久久88久久久| 午夜精品久久久久久久99热| 精品一区二区三孕妇视频| 88久久精品| 欧美性视频一区二区三区| 日韩视频免费播放| 日韩免费啪啪| 久久综合九色综合97婷婷女人| 91麻豆国产精品| 狠狠人妻久久久久久综合| 欧美国产精品| www日韩欧美| 精品少妇一区二区三区免费观| 精品中文字幕一区二区三区四区| 色94色欧美sute亚洲线路一ni| 在线免费观看一区二区三区| 国产精品四虎| www国产成人| 国产女主播一区二区| 国产欧美一级片| 美女任你摸久久| 欧美与欧洲交xxxx免费观看 | 久久精品一偷一偷国产| 久久久久久久久福利| 欧美综合精品| 亚洲成人精品久久| 日韩黄色一区二区| 日本精品视频| 日韩欧美一级特黄在线播放| 九九热免费在线观看| 天堂久久午夜av| 一本久久a久久精品亚洲| 国产白丝袜美女久久久久| 调教一区二区| 亚洲电影在线免费观看| 成人高清dvd| 亚洲欧美成人影院| 一区二区三区四区不卡视频| 在线观看成人免费| 爆操欧美美女| 怡红院av一区二区三区| 91精品国产毛片武则天| 女同一区二区免费aⅴ| 亚洲综合一二三区| 无码人妻精品一区二区蜜桃网站| 污影院在线观看| 亚洲丰满少妇videoshd| www在线观看免费| 男人久久天堂| 91激情在线视频| 性chinese极品按摩| 国产成人精品一区二区三区免费| 欧美精选午夜久久久乱码6080| 最新天堂中文在线| 国产一区二区三区免费观看在线| 欧美日韩一区精品| 久久撸在线视频| 日本精品视频| 日韩不卡在线观看| 国产jjizz一区二区三区视频| 精品国产一区二区三区av片| 上原亚衣av一区二区三区| 五月天色婷婷丁香| 狠狠色狠狠色综合日日tαg | 日本欧美一区| 91.com视频| 精品人妻伦一二三区久| 国产成人精品三级高清久久91| 中文字幕日韩在线观看| caoporn91| 国产精品久久国产愉拍| 国产成人午夜视频网址| 91麻豆一区二区| 七七成人影院| 精品成人免费| 欧美中文字幕第一页| 久久久久久无码午夜精品直播| 男女性色大片免费观看一区二区 | 校园春色 亚洲色图| 粉嫩91精品久久久久久久99蜜桃| 日韩欧美你懂的| 人妻在线日韩免费视频| 久久综合成人| 97久久精品人搡人人玩| 中文字幕在线观看精品| 国产成人精品aa毛片| 日本一区二区不卡高清更新| 菠萝菠萝蜜在线视频免费观看| 欧美性xxxxx极品| 久久久久xxxx| 一本久久青青| 久久69精品久久久久久久电影好 | 日韩精品一区二区三区国语自制| 99国产一区| 国产精品视频久久久久| 国产小视频免费观看| 日本一区二区成人在线| 久久国产精品视频在线观看| 日韩毛片免费视频一级特黄| 精品视频偷偷看在线观看| 国产精品 欧美激情| 日韩中文字幕亚洲一区二区va在线| 97中文在线观看| av中文资源在线| 精品露脸国产偷人在视频| 国产精品久久久久久久av福利| 久久综合亚洲| 久久久亚洲精选| 国产毛片毛片毛片毛片毛片| 久久精品亚洲麻豆av一区二区 | 在线不卡日本v二区707| 欧美性生交片4| 久久精品老司机| 亚洲美女黄网| 国产高清在线一区二区| 久久77777| 极品尤物一区二区| 亚洲美女黄网| www.久久艹| 黄色片网站在线观看| 在线观看日产精品| av网站免费在线播放| 国产精品99免费看| 99九九视频| 成人日批视频| 91麻豆精品国产91久久久久| 国产传媒视频在线| 蜜桃av一区二区在线观看| 欧美日韩亚洲免费| 都市激情亚洲一区| 亚洲美女精品久久| 国内自拍视频在线播放| 久久综合色之久久综合| 欧美二区在线视频| 日本午夜精品久久久| 91av在线免费观看| 天堂v视频永久在线播放| 精品国产电影一区| 丰满大乳奶做爰ⅹxx视频| 一区二区三区福利| 蜜桃av噜噜一区二区三区| 国产黄大片在线观看| 日韩高清人体午夜| 国产污视频网站| 中文字幕乱码日本亚洲一区二区| 手机在线看福利| 国产精品久久久久久影院8一贰佰 国产精品久久久久久麻豆一区软件 | 亚洲欧美日韩成人高清在线一区| 亚洲一二区在线观看| 亚洲综合五月| 国产伦精品一区二区三区视频孕妇| 91黄页在线观看| 亚洲男人天堂九九视频| 中国精品一区二区| 日韩毛片一二三区| 中文字幕永久免费| 国产欧美在线| 色99中文字幕| 国产免费区一区二区三视频免费| 欧美精品videossex性护士| 天天爽夜夜爽夜夜爽| 在线视频综合导航| 国产精品精品软件男同| 成人做爰69片免费看网站| 国产免费观看高清视频| 成人av国产| 91网免费观看| 午夜激情成人网| 欧美成人在线网站| 五十路在线视频| 欧美日韩黄色一区二区| 久久久久久久福利| 久久久综合视频| 亚洲精品在线网址| 国产精品久久国产愉拍| 中文字幕人成一区| 国产一区调教| 国产欧美韩国高清| а√在线天堂官网| 日韩在线视频免费观看| 高h震动喷水双性1v1| 欧美亚洲动漫另类| 国产一级二级三级| 国产精品视频yy9299一区| 中国免费黄色片| 日本在线不卡视频| 97在线国产视频| 91麻豆国产自产在线观看亚洲| 国产精品手机在线| 日韩一区二区三免费高清在线观看| 欧美激情图片区| 性开放的欧美大片| 国产视频自拍一区| 亚洲第一免费视频| 欧美挠脚心视频网站| 丁香六月婷婷综合| 一区二区三区免费观看| 日本一二三不卡视频| 99久久综合国产精品| 久久久久久久久久毛片| 久久亚洲美女| 国产白丝袜美女久久久久| 久久久五月天| 日产精品久久久一区二区| 国产香蕉精品| 国产高清不卡av| 国产精品免费精品自在线观看| 日本久久久久久久久| 成人影音在线| 美女视频黄免费的亚洲男人天堂| 北岛玲一区二区三区| 国产丝袜一区二区三区| 人妻偷人精品一区二区三区| 欧美一级搡bbbb搡bbbb| 91黄色在线视频| 精品视频一区二区三区免费| 亚洲 欧美 中文字幕| 五月天视频一区| 日韩激情一区二区三区| 亚洲美女屁股眼交| 丝袜 亚洲 另类 欧美 重口| 中文字幕制服丝袜成人av| xxxx日本黄色| 国产欧美日韩中文久久| 亚洲欧美在线不卡| 99久久99精品久久久久久| av天堂一区二区| 福利电影一区二区| 日本一区二区免费视频| 懂色一区二区三区免费观看| 国产调教打屁股xxxx网站| 国产成人午夜精品影院观看视频 | 亚洲精品第一| 91精品国产自产在线| 95精品视频| 亚洲在线第一页| 久久av网站| a级国产乱理论片在线观看99| 日韩一区二区三区精品视频第3页| 91免费看片网站| 久久久久亚洲精品中文字幕| 91免费国产网站| 超碰97久久| 久久国产精品一区二区三区四区 | 香蕉视频在线网址| 欧美激情欧美| 成人在线播放网址| 国产日韩亚洲| 丰满少妇在线观看| 国产在线国偷精品免费看| 操人视频免费看| 成人黄色一级视频| 亚洲av片不卡无码久久| 亚洲国产精品成人综合| 四虎精品免费视频| 亚洲国产精品久久久久秋霞影院| 亚洲黄色三级视频| 色爱区综合激月婷婷| 国产乱淫av免费| 亚洲风情亚aⅴ在线发布| 久久精品国产亚洲a∨麻豆| 色av中文字幕一区| 手机在线免费观看av| 奇米四色中文综合久久| 久久日本片精品aaaaa国产| 97伦理在线四区| 欧美美乳视频| 男女h黄动漫啪啪无遮挡软件| 黄色免费成人| 亚洲最大综合网| 丰满放荡岳乱妇91ww| 亚洲午夜久久久久久久久红桃 | 婷婷亚洲婷婷综合色香五月| 欧美成人有码| 国产精品涩涩涩视频网站| 精品一区二区三区视频在线观看| 精品1卡二卡三卡四卡老狼| 国产欧美精品一区二区色综合| 老妇女50岁三级| 一本到高清视频免费精品| 国产ts变态重口人妖hd| 国产一区二区三区直播精品电影| 色婷婷视频在线观看| 国产精品日韩精品| 日本国产精品| 一二三在线视频| 日韩国产欧美视频| 中文字幕99页| 国产精品激情偷乱一区二区∴| 国产精品30p| 在线播放日韩导航| 九色视频在线观看免费播放| 欧美极品美女视频网站在线观看免费| 视频在线日韩| 精品在线观看一区二区| 欧美福利专区| 在线免费看污网站| 国产亲近乱来精品视频| 永久免费看片在线播放| 欧美一卡二卡三卡四卡| 91caoporm在线视频| 欧洲成人免费视频| 国产精品2023| 中文字幕色呦呦| 麻豆高清免费国产一区| 久久只有这里有精品| 亚洲v中文字幕| 丰满人妻一区二区三区免费视频| 日韩有码视频在线| 精品日韩视频| 欧洲视频一区二区三区| 99精品国产99久久久久久福利| 天天干天天曰天天操| 专区另类欧美日韩| 亚洲综合网av| 中文字幕日韩有码| 懂色aⅴ精品一区二区三区| 日韩精彩视频| 久久永久免费| 亚洲av熟女国产一区二区性色| 欧美午夜激情在线| 凸凹人妻人人澡人人添| 亚州国产精品久久久| 97se亚洲国产一区二区三区| 日韩专区第三页| 国产一区在线不卡| 中文字幕五月天| 欧美一区日本一区韩国一区| 成人在线视频亚洲| 91视频99| 黑人一区二区三区四区五区| 久久久久久久久久久久国产精品| 亚洲综合激情网| 内射后入在线观看一区| 久久久久久一区二区三区| swag国产精品一区二区| 国产v片免费观看| av电影天堂一区二区在线 | 国产精品日本| 无套内谢大学处破女www小说| 色综合天天综合网天天狠天天| 男人av在线| 国产精品免费一区| 91精品国产调教在线观看| 原创真实夫妻啪啪av| 香蕉成人伊视频在线观看| 亚州av在线播放| 国产成人激情小视频| 99精品电影| 国产伦精品一区二区三区妓女下载 | 日韩精品专区| 亚洲午夜在线观看| 国产乱对白刺激视频不卡| 国产亚洲欧美精品久久久久久| 亚洲精品大尺度| 亚洲日本网址| 国产卡一卡二在线| bt7086福利一区国产| 欧美成人一区二区三区四区| www.亚洲一区| 国产一区调教| 国产原创精品在线| 亚洲狠狠丁香婷婷综合久久久| 香港三日本三级少妇66| 国产精品嫩草视频| 极品裸体白嫩激情啪啪国产精品| 懂色av粉嫩av蜜乳av| 欧美日本免费一区二区三区| 在线中文字幕第一页| 精品无人区一区二区三区| 秋霞午夜av一区二区三区| 青青草免费av| 亚洲性无码av在线| 日韩欧美久久| 日日碰狠狠丁香久燥| 亚洲乱码精品一二三四区日韩在线| 日本激情一区二区| 国产热re99久久6国产精品| 1024日韩| аⅴ天堂中文在线网| 亚洲成人在线视频播放| 黑人一区二区三区|