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

面試官:說(shuō)下你對(duì)AQS的理解!

開(kāi)發(fā) 前端
AQS,是?AbstractQueuedSynchronizer(抽象隊(duì)列同步器)這個(gè)類(lèi)的簡(jiǎn)稱(chēng),也是 Java JUC 包中的靈魂,ReentrantLock、ReentrantReadWriteLock、Semaphore、CountDownLatch、CyclicBarrier 都是通過(guò)其實(shí)現(xiàn)鎖或同步器的。

在技術(shù)面試的時(shí)候,“說(shuō)下你對(duì) AQS 的理解”,這個(gè)問(wèn)題出現(xiàn)的概率屬實(shí)不低,而一些技術(shù)底子一般的同學(xué),又非常容易被它復(fù)雜的底層源碼弄得暈頭轉(zhuǎn)向。

今天這篇文章,我們就以做減法的方式,將這個(gè)知識(shí)點(diǎn)徹底地大家講清楚。

AQS,是 AbstractQueuedSynchronizer(抽象隊(duì)列同步器)這個(gè)類(lèi)的簡(jiǎn)稱(chēng),也是 Java JUC 包中的靈魂,ReentrantLock、ReentrantReadWriteLock、Semaphore、CountDownLatch、CyclicBarrier 都是通過(guò)其實(shí)現(xiàn)鎖或同步器的。

其核心思想為,在多線程并發(fā)訪問(wèn)共享資源時(shí),通過(guò)雙向鏈表實(shí)現(xiàn)的先進(jìn)先出 CLH 隊(duì)列進(jìn)行線程排隊(duì),并通過(guò)由 volatile 修飾的 state 變量來(lái)標(biāo)識(shí)資源的鎖占用狀態(tài)。

如下圖所示:

圖片圖片

在 AQS 中提供了兩種資源獲取方式:

獨(dú)占模式(Exclusive),在同一時(shí)刻只能有一個(gè)線程獲取競(jìng)態(tài)資源,比如:ReentrantLock。

共享模式(Share),在同一時(shí)刻可以有多個(gè)(參數(shù)設(shè)定)線程獲取競(jìng)態(tài)資源,比如:CountDownLatch、Semaphore。

AQS 方法詳述

AQS 的方法大致分為三類(lèi),分別是獨(dú)占模式下的方法、共享模式下的方法、通過(guò)模板方法模式留給子類(lèi)實(shí)現(xiàn)的方法。

獨(dú)占模式:

// 獲取鎖
public final void acquire(int arg) 
// 以可中斷的方式獲取鎖
public final void acquireInterruptibly(int arg)
// 以帶超時(shí)時(shí)間的方式,嘗試獲取鎖
public final boolean tryAcquireNanos(int arg, long nanosTimeout)
// 釋放鎖
public final boolean release(int arg)

共享模式:

// 獲取鎖
public final void acquireShared(int arg)
// 以可中斷的方式獲取鎖
public final void acquireSharedInterruptibly(int arg)
// 以帶超時(shí)時(shí)間的方式,嘗試獲取鎖
public final boolean tryAcquireSharedNanos(int arg, long nanosTimeout)
// 釋放鎖
public final boolean releaseShared(int arg)

需要子類(lèi)實(shí)現(xiàn)的方法:

// 嘗試獲取獨(dú)占鎖
protected boolean tryAcquire(int arg);
// 嘗試釋放獨(dú)占鎖
protected boolean tryRelease(int arg);
// 嘗試獲取共享鎖
protected int tryAcquireShared(int arg);
// 嘗試釋放共享鎖
protected boolean tryReleaseShared(int arg);
// 判斷當(dāng)前線程是否正在持有鎖
protected boolean isHeldExclusively();

看到 AQS 父類(lèi)實(shí)現(xiàn)了一部分方法,也預(yù)留了一些方法讓 ReentrantLock、CountDownLatch、Semaphore、CyclicBarrier 等子類(lèi)實(shí)現(xiàn),我們想到了哪種設(shè)計(jì)模式?

是的,模板方法模式。

模板方法模式:定義一個(gè)操作中算法的框架,而將一些步驟延遲到子類(lèi)中,模板方法使得子類(lèi)可以不改變一個(gè)算法的結(jié)構(gòu),即可重定義該算法的某些步驟。

使用模板方法模式,可以將一個(gè)操作的復(fù)雜流程的實(shí)現(xiàn)步驟進(jìn)行拆分,封裝在一系列基本方法中,在抽象父類(lèi)提供一個(gè)模板方法來(lái)定義整體執(zhí)行步驟,而通過(guò)其子類(lèi)來(lái)覆蓋某個(gè)步驟,從而使得相同的執(zhí)行步驟可以有不同的執(zhí)行結(jié)果。

類(lèi)結(jié)構(gòu)如下:

圖片圖片

模板方法模式的優(yōu)點(diǎn)在于:

  • 代碼復(fù)用性高,父類(lèi)的模板方法和具體方法都可以供多個(gè)子類(lèi)復(fù)用。
  • 代碼靈活性高,可根據(jù)業(yè)務(wù)迭代情況,靈活選擇哪部分復(fù)用父類(lèi)具體方法,哪部分進(jìn)行子類(lèi)覆蓋實(shí)現(xiàn)。

嗯,這些底層源碼的設(shè)計(jì)還是非常巧妙的,而設(shè)計(jì)模式本身也并不是有些人口中的過(guò)度設(shè)計(jì)的“花架子”。

ReentrantLock 與 AQS 

接下來(lái)我們看下,ReentrantLock 是如何通過(guò) AQS 來(lái)實(shí)現(xiàn)鎖機(jī)制的。

兩者間的 UML 圖如下所示:

圖片圖片

從圖中可以看到,ReentrantLock 中有一個(gè) Sync 內(nèi)部類(lèi),Sync 繼承自 AQS,且 Sync 有兩個(gè)子類(lèi) FairSync 和 NonfairSync,分別用于實(shí)現(xiàn)公平鎖和非公平鎖。

我們梳理一下源碼,看看 ReentrantLock 如何實(shí)現(xiàn)非公平鎖的。

代碼入口如下,我們看只有兩個(gè)方法加上一個(gè)判斷。

public class ReentrantLock implements Lock, java.io.Serializable{


    abstract static class Sync extends AbstractQueuedSynchronizer {
        final void lock() {    
            if (!initialTryLock())
                acquire(1);
            }
        }
    }     
}

來(lái)看下該方法的具體實(shí)現(xiàn),簡(jiǎn)而言之,該方法嘗試以獨(dú)占的方式獲取鎖。

static final class NonfairSync extends Sync {    
    final boolean initialTryLock() {        
        Thread current = Thread.currentThread();        
        if (compareAndSetState(0, 1)) {
            // first attempt is unguarded            
            setExclusiveOwnerThread(current);            
            return true;        
        } else if (getExclusiveOwnerThread() == current) {
            int c = getState() + 1;            
            if (c < 0) // overflow                
                throw new Error("Maximum lock count exceeded");      
            setState(c);            
            return true;        
        } else            
            return false;   
     }
 }

先是通過(guò) compareAndSetState(0, 1) 方法,以原子操作的方式將 AQS 類(lèi)中的 state 變量值從 0 修改到 1。

我們?cè)谏衔闹刑岬竭^(guò),state 變量來(lái)標(biāo)識(shí)資源的鎖占用狀態(tài),0 代表未占用,1 代表已占用,大于 1 則代表鎖被重入,那么該操作就是嘗試獲取鎖。

若該操作執(zhí)行成功,則通過(guò) setExclusiveOwnerThread(current) 作用是將當(dāng)前線程設(shè)置為持有獨(dú)占鎖的線程,并返回 true,代表獲取鎖成功了。

再往下分析 getExclusiveOwnerThread() == current,這是判斷當(dāng)前線程是否已獲取該鎖且處于未釋放的狀態(tài),若判斷成立則將 state 變量+1代表重入,并返回 true 表示獲取鎖成功。

btw:從這段代碼邏輯上看,知道為什么叫非公平鎖了吧,一上來(lái)并沒(méi)有通過(guò) AQS 排隊(duì),而且先去爭(zhēng)搶鎖。

接下來(lái)我們繼續(xù)來(lái)看acquire(1)方法,代碼如下:

public abstract class AbstractQueuedSynchronizer extends AbstractOwnableSynchronizer implements java.io.Serializable {
    public final void acquire(int arg) {
        if (!tryAcquire(arg))
            acquire(null, arg, false, false, false, 0L);
    }
}

方法體重有兩個(gè)方法加上一個(gè)判斷,先來(lái)看 tryAcquire(arg) 方法的執(zhí)行邏輯。

static final class NonfairSync extends Sync {
    protected final boolean tryAcquire(int acquires) {
        if (getState() == 0 && compareAndSetState(0, acquires)) {
            setExclusiveOwnerThread(Thread.currentThread());
            return true;
        }
        return false;
    }
}

這塊代碼的邏輯竟然跟上面 initialTryLock() 方法的前半段幾乎一樣,先是通過(guò) compareAndSetState(0, 1) 方法將 AQS 類(lèi)中的 state 變量值從 0 修改到 1。

若該操作執(zhí)行成功,則通過(guò) setExclusiveOwnerThread(current) 作用是將當(dāng)前線程設(shè)置為持有獨(dú)占鎖的線程,并返回 true,代表獲取鎖成功了。

btw:果然是非公平鎖啊,這是誓要將插隊(duì)爭(zhēng)搶鎖進(jìn)行到底了。

下面就是 AQS 中的重頭戲了,acquire(null, arg, false, false, false, 0L)方法,實(shí)現(xiàn)排隊(duì)獲取鎖。

代碼實(shí)現(xiàn)如下:

圖片圖片

這塊代碼并非主業(yè)務(wù)鏈路,先是進(jìn)行了三個(gè)判斷,當(dāng)前節(jié)點(diǎn)不是 first 節(jié)點(diǎn)和 head 節(jié)點(diǎn),且前驅(qū)結(jié)點(diǎn)不為null。

btw:head 節(jié)點(diǎn)可以理解為“當(dāng)前持有獨(dú)占鎖的線程”,而在 head 節(jié)點(diǎn)之后的線程都處于阻塞、等待被喚醒的狀態(tài),而 first 節(jié)點(diǎn)則是同步隊(duì)列中第一個(gè)等待獲取鎖的線程。

接下來(lái) pred.status < 0 代表前驅(qū)節(jié)點(diǎn)已經(jīng)被取消,結(jié)果為 true 則做一次等待隊(duì)列清理。

而 pred.prev == null 則是判斷前驅(qū)節(jié)點(diǎn)是否為 null,結(jié)果為 true 則跳到下一次循環(huán)中。

圖片圖片

這段代碼的意思是,在當(dāng)前節(jié)點(diǎn)為 first 節(jié)點(diǎn)或前驅(qū)節(jié)點(diǎn)為 null (未入隊(duì))的情況下,繼續(xù)通過(guò) tryAcquire(arg) 方法嘗試獲取鎖。

圖片圖片

這段代碼看起來(lái)比較復(fù)雜,其實(shí)也是有邏輯性的。

1、前兩個(gè)大的邏輯分支判斷的意思是,先創(chuàng)建一個(gè)獨(dú)占節(jié)點(diǎn),并將該節(jié)點(diǎn)加入到 CLH 隊(duì)列的尾部。

2、如果當(dāng)前節(jié)點(diǎn)為 first 節(jié)點(diǎn),且自旋數(shù)大于 0,則繼續(xù)嘗試自旋獲取鎖。

3、將當(dāng)前節(jié)點(diǎn)的狀態(tài)值設(shè)置為“等待中”。

4、當(dāng)前節(jié)點(diǎn)自旋失敗,使用 LockSupport.pack() 方法掛起線程。

5、當(dāng)獨(dú)占鎖被釋放,隊(duì)列中的 first 節(jié)點(diǎn)的線程將被喚醒,清除當(dāng)前節(jié)點(diǎn)的等待狀態(tài)。

責(zé)任編輯:武曉燕 來(lái)源: 托尼學(xué)長(zhǎng)
相關(guān)推薦

2021-11-25 10:18:42

RESTfulJava互聯(lián)網(wǎng)

2021-08-09 07:47:40

Git面試版本

2024-09-27 15:43:52

零拷貝DMAIO

2020-12-01 08:47:36

Java異常開(kāi)發(fā)

2025-02-21 15:25:54

虛擬線程輕量級(jí)

2020-06-12 15:50:56

options前端服務(wù)器

2025-03-21 00:00:05

Reactor設(shè)計(jì)模式I/O 機(jī)制

2022-03-21 09:05:18

volatileCPUJava

2024-10-24 16:14:43

數(shù)據(jù)傳輸CPU零拷貝

2025-08-18 00:00:00

零拷貝系統(tǒng)調(diào)用函數(shù)

2024-08-27 12:36:33

2020-06-19 15:32:56

HashMap面試代碼

2024-06-13 08:01:19

2025-03-07 00:00:10

2019-07-26 06:42:28

PG架構(gòu)數(shù)據(jù)庫(kù)

2024-10-12 16:25:12

2021-09-16 07:52:18

算法應(yīng)用場(chǎng)景

2024-08-26 14:52:58

JavaScript循環(huán)機(jī)制

2024-09-26 16:01:52

2019-05-10 10:50:04

Spring AOPJDK動(dòng)態(tài)代理CGLIB動(dòng)態(tài)代理
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产精品500部| 亚洲精品久久区二区三区蜜桃臀| 九九九久久久久| 成人午夜大片| 欧美日韩在线影院| 五月天亚洲综合小说网| 国产三区在线播放| 免费在线观看国产精品| 极品人妻一区二区| 青青草免费在线| 久久er精品视频| 91国内在线视频| 亚洲精品国产精品乱码在线观看| 午夜久久av| 在线视频一区二区三| 懂色av一区二区三区四区五区| 韩国av永久免费| 蜜桃久久久久久| 久久久久久久一| 潘金莲一级黄色片| 国产成人精品一区二区免费看京| 日韩一区二区三区电影在线观看 | 亚洲色图在线看| 九九99久久| 99久久久国产精品无码免费| 久久成人在线| 欧美激情精品久久久久| 久久精品国产亚洲AV成人婷婷| 精品综合久久88少妇激情| 91精品午夜视频| 宅男噜噜噜66国产免费观看| а√在线中文网新版地址在线| 国产精品二三区| 日韩福利二区| 日本成人一区| 国产在线精品视频| 国产乱肥老妇国产一区二| 国产精品免费精品一区| 激情综合久久| 九九久久久久99精品| 亚洲一级二级片| 亚洲天堂网站| 亚洲欧美综合| 亚洲九九九在线观看| 亚洲精品久久久久久| 日韩综合av| 在线亚洲免费视频| 毛片av免费在线观看| 白浆在线视频| 天天色 色综合| av免费观看大全| av日韩中文| 精品久久久国产精品999| www.18av.com| 伊人影院在线视频| 一区二区三区精密机械公司| 热久久最新地址| 色www永久免费视频首页在线| 亚洲欧美一区二区三区久本道91| 亚洲一区二三| 日本暖暖在线视频| 中文字幕一区av| 色中文字幕在线观看| 国产在线69| 一区二区三区丝袜| www.夜夜爱| 欧亚av在线| 91久久一区二区| 在线免费观看视频黄| 色999韩欧美国产综合俺来也| 欧美日韩一本到| 99中文字幕在线| 在线观看视频一区二区三区| 亚洲电影中文字幕| 国产熟妇搡bbbb搡bbbb| 日韩电影二区| 蜜臀久久99精品久久久无需会员| 久久久久久免费观看| 99精品国产一区二区青青牛奶| 2020欧美日韩在线视频| 在线观看你懂的网站| 激情欧美一区二区| 粉嫩高清一区二区三区精品视频| 色欲av永久无码精品无码蜜桃 | 亚洲男女在线观看| 亚洲欧洲色图| 久久久国产精品视频| 久久久久亚洲av片无码下载蜜桃| 99在线精品视频在线观看| 国产成人精品优优av| av片免费播放| www激情久久| 午夜啪啪免费视频| 蜜桃视频www网站在线观看| 欧美性猛交xxxx黑人交| 在线播放av网址| 国产一区二区三区四区五区传媒| 日韩中文字幕在线免费观看| 日韩成人高清视频| 久久精品国产精品亚洲综合| 精品国产乱码一区二区三区四区| 国产在线一二三区| 亚洲一区精品在线| 天天干天天干天天干天天干天天干| 日韩精品成人在线观看| 亚洲色图av在线| 久久久久无码国产精品| 蜜桃视频一区二区三区| 麻豆精品视频| 亚洲大胆人体大胆做受1| 在线亚洲欧美专区二区| 小毛片在线观看| 91精品啪在线观看国产18| 欧美资源在线观看| 黄色一级大片在线免费看国产| 欧美激情综合网| 男女私大尺度视频| 国产日韩一区二区三免费高清| 日韩精品中文字幕在线| 久久国产在线观看| 久久国产精品99久久人人澡| 老司机精品福利在线观看| 日本aa在线| 欧美人伦禁忌dvd放荡欲情| 中文字幕一区二区人妻在线不卡| 欧美激情四色| 成人亲热视频网站| 成人影视在线播放| 色婷婷久久久综合中文字幕| 中国极品少妇xxxx| 欧美激情综合色综合啪啪| 国产日本欧美一区二区三区| 蜜桃视频在线观看视频| 精品久久久久久久久中文字幕| 男男受被啪到高潮自述| 国产精品伦理久久久久久| 国产精品久久久久久久久久久久久久 | 在线一区免费观看| 成人欧美一区二区| 日本在线观看高清完整版| 51精品国自产在线| 欧美色视频一区二区三区在线观看| 久久一区中文字幕| 欧美专区一二三| 激情亚洲影院在线观看| 亚洲人成毛片在线播放| 久久久久久久久久一级| 久久久91精品国产一区二区精品| 成人黄色片视频| 欧美调教在线| 91国产在线精品| 色欲久久久天天天综合网| 亚洲aaa精品| 800av在线播放| 国产精品久久久久久久免费软件| 精品午夜一区二区| 成人性生交大片免费网站| 精品视频中文字幕| 无码人妻久久一区二区三区| 天堂99x99es久久精品免费| 美女999久久久精品视频| 国产三级在线观看视频| 一区二区视频在线| 911亚洲精选| 亚洲精品一级| 免费看成人片| 日韩一区二区三区免费视频| 丝袜一区二区三区| 精品久久久免费视频| 亚洲网友自拍偷拍| 免费黄色在线视频| 美女高潮久久久| 日韩最新中文字幕| 国产精品一线| 日韩av电影手机在线| 色网站免费在线观看| 日韩一级精品视频在线观看| 精品少妇theporn| 91免费国产在线| 中文字幕永久视频| 中文字幕乱码亚洲无线精品一区| 国产精品毛片va一区二区三区| 中文字幕在线视频久| 在线一区二区日韩| 成人h动漫精品一区二区无码 | 国产亚洲精品91在线| 91国内精品视频| 黄色一区二区三区| 黄色裸体一级片| 国产69精品久久久久777| 日本免费黄视频| 999视频精品| 激情欧美一区二区三区中文字幕| 国产日韩另类视频一区| 久久综合亚洲社区| 日韩一二三四| 91麻豆精品国产91久久久资源速度 | 国产精品99久久久久久久久久久久 | 精品偷拍一区二区三区在线看| 中文字幕一区二区在线视频| 亚洲自拍偷拍麻豆| jizz18女人高潮| 99热在这里有精品免费| 天堂在线中文在线| 国产精品毛片| 日本免费成人网| 日本久久精品| 玛丽玛丽电影原版免费观看1977| 精品一区二区三区亚洲| 国产精品96久久久久久| japanese色国产在线看视频| 日韩在线视频观看| 看电影就来5566av视频在线播放| 日韩女同互慰一区二区| 中文字幕乱码无码人妻系列蜜桃| 亚洲成人av电影| 糖心vlog免费在线观看| 国产欧美日韩不卡| 久久人人爽人人人人片| 国产成人综合亚洲网站| 亚洲xxx在线观看| 久久狠狠婷婷| 亚洲 欧美 日韩 国产综合 在线| 一区二区日韩欧美| 午夜啪啪免费视频| 色无极亚洲影院| 日本在线视频不卡| 亚洲免费专区| 久久99影院| 国产精品45p| 成人h视频在线观看| 国产免费区一区二区三视频免费 | www国产免费| 国产韩日影视精品| 亚洲午夜精品久久久中文影院av| 中日韩免视频上线全都免费| 乱色588欧美| 五月综合久久| 精品视频一区二区三区四区| 超碰成人免费| 国产91一区二区三区| 亚洲免费一区三区| 国产成人免费电影| 成人av资源网址| 国产乱人伦精品一区二区| 在线精品国产亚洲| 国产精品一区二| 国产伦精品一区二区三区在线播放| 96成人在线视频| 日韩视频在线直播| 99久久自偷自偷国产精品不卡| www.91精品| 999热视频| 91精品国产乱码久久久竹菊| 成人做爰66片免费看网站| 白嫩白嫩国产精品| 九九九九九九精品| 蜜臀91精品国产高清在线观看| 欧美日韩精品久久| 欧美色图激情小说| 一区二区不卡在线观看| 亚洲综合专区| 免费网站在线观看视频 | 久久久久中文字幕| 色在线免费观看| 国产精品久久久久不卡| 99久久久国产| 国产精品乱码| 极品美女一区二区三区| 夜夜春亚洲嫩草影视日日摸夜夜添夜| 色中色综合网| 欧洲精品视频在线| 国产日产高清欧美一区二区三区| 97av视频在线观看| 美腿丝袜亚洲色图| 麻豆精品国产传媒| aa级大片欧美| 妖精视频在线观看免费| 亚洲老妇xxxxxx| 国产手机在线视频| 欧美在线免费视屏| 成人h动漫精品一区二区无码| 亚洲国产精品专区久久| av电影在线网| 久久999免费视频| 东京一区二区| 亚洲一区二区三区四区在线播放| 韩国精品福利一区二区三区| 欧美影视一区二区| 国产精品99免费看| 超碰97人人射妻| 国产精品亚洲专一区二区三区| 毛茸茸free性熟hd| 国产精品不卡视频| 亚欧视频在线观看| 欧美一区二区三区啪啪| 天天av综合网| 欧美xxxx综合视频| 在线国产成人影院| 国产精品免费看一区二区三区| 韩日一区二区三区| 日韩a级在线观看| 免费成人性网站| 亚洲观看黄色网| 亚洲欧美另类图片小说| 成年人av网站| 精品福利在线导航| 黄网站在线免费| 国产不卡视频在线| 国产精品网站在线看| 久久av喷吹av高潮av| 丝瓜av网站精品一区二区| 日本道中文字幕| 亚洲欧美另类在线| 在线观看日批视频| 亚洲欧美激情精品一区二区| 免费看电影在线| **亚洲第一综合导航网站| 精品久久电影| 国产免费成人在线| 99在线精品免费| 精品爆乳一区二区三区无码av| 欧美系列在线观看| 嫩草研究院在线观看| 98精品在线视频| 超碰成人在线免费| 日韩精品一区二区三区四| 韩国视频一区二区| 老司机精品免费视频| 91久久久免费一区二区| 神马久久精品| 91国产一区在线| 红杏aⅴ成人免费视频| 日韩精品一区二区在线视频| 国产乱人伦偷精品视频免下载| 一级黄色毛毛片| 欧美亚洲一区三区| 国产精品ⅴa有声小说| 欧美一区亚洲一区| 你懂的视频欧美| 男女av免费观看| 久久精品亚洲乱码伦伦中文| 精品人妻一区二区三区免费看 | 成熟妇人a片免费看网站| 亚洲午夜一二三区视频| 丰满少妇在线观看bd| 久久久人成影片一区二区三区观看| 亚洲一区二区三区免费| 欧美 亚洲 视频| 懂色一区二区三区免费观看| 久久午夜无码鲁丝片| 亚洲国产精品va在线看黑人动漫| cao在线视频| 欧美激情导航| 日本欧美在线观看| www成人啪啪18软件| 欧美日本视频在线| 在线免费观看污| 国产欧美丝袜| 久久亚洲图片| 成人精品一二三区| 日韩视频在线观看一区二区| 午夜影院免费在线| 精品蜜桃一区二区三区| 久久精品中文| 波兰性xxxxx极品hd| 欧美一二区视频| 日本三级一区| 亚洲欧美国产不卡| 国产高清不卡一区| 日韩成人免费观看| 在线国产精品播放| 高清精品久久| 给我免费播放片在线观看| 国产亚洲精品7777| 国产一区二区麻豆| 欧美精品videossex性护士| 婷婷亚洲成人| 欧美成人三级在线播放| 亚洲一区日韩精品中文字幕| 色在线免费视频| 成人午夜一级二级三级| 亚洲激情影院| 国产一区在线观看免费| 亚洲成年人影院在线| 亚洲不卡系列| a天堂资源在线观看| 久久久精品日韩欧美| 国产视频一区二区三| 26uuu国产精品视频| 婷婷综合伊人| 黄色正能量网站| 欧美一区二区三区小说| 依依综合在线| 中文字幕人妻熟女人妻洋洋| 久久久影院官网| 亚洲AV无码精品自拍| 国产精品高潮呻吟久久av野狼 | 色免费在线视频| 午夜激情综合网|