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

多線(xiàn)程交替輸出A1B2C3D4...你怎么實(shí)現(xiàn)?

開(kāi)發(fā) 前端
CountDownLatch是Java多線(xiàn)程中的一個(gè)同步工具類(lèi),它可以讓一個(gè)或多個(gè)線(xiàn)程等待其他線(xiàn)程完成操作后再繼續(xù)執(zhí)行。

引言

不知道最近有沒(méi)有小伙伴去面試,今天了不起回想到了早期去面試遇到的一個(gè)多線(xiàn)程面試問(wèn)題。

面試問(wèn)題是一個(gè)筆試題:

兩個(gè)線(xiàn)程依次交替輸出A~Z,1到26,形如A1B2C3D4...

當(dāng)時(shí)的我還很菜,用了原生的線(xiàn)程,借助wait和notify方法實(shí)現(xiàn)。

伙伴們你們也可以先暫停,自己思考下用什么方式來(lái)實(shí)現(xiàn)。

今天了不起和伙伴們一起來(lái)基于JDK1.8進(jìn)行實(shí)現(xiàn)方式的探索,請(qǐng)看下文。

1. 使用線(xiàn)程方法

wait()方法會(huì)使當(dāng)前線(xiàn)程釋放鎖,并進(jìn)入等待狀態(tài),直到以下情況之一發(fā)生:

  • 被其他線(xiàn)程調(diào)用notify()方法喚醒;
  • 被其他線(xiàn)程調(diào)用notifyAll()方法喚醒;
  • 被其他線(xiàn)程中斷。

notify()方法用于喚醒一個(gè)正在等待的線(xiàn)程,使其從wait()方法中返回。

結(jié)合一個(gè)出讓等待的機(jī)制,就這樣交替實(shí)現(xiàn)。

public class T06_00_sync_wait_notify {
    public static void main(String[] args) {
        final Object o = new Object();

        char[] aI = "1234567".toCharArray();
        char[] aC = "ABCDEFG".toCharArray();

        new Thread(()->{
            synchronized (o) {
                for(char c : aI) {
                    System.out.print(c);
                    try {
                        o.notify();
                        o.wait(); //讓出鎖
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }

                o.notify(); //必須,否則無(wú)法停止程序
            }

        }, "t1").start();

        new Thread(()->{
            synchronized (o) {
                for(char c : aC) {
                    System.out.print(c);
                    try {
                        o.notify();
                        o.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }

                o.notify();
            }
        }, "t2").start();
    }
}

運(yùn)行結(jié)果:

圖片圖片

思考:伙伴們,如果我想保證t2在t1之前打印,也就是說(shuō)保證首先輸出的是A而不是1,這個(gè)時(shí)候該如何做?

2. 使用CountDownLatch鐵門(mén)閂

CountDownLatch是Java多線(xiàn)程中的一個(gè)同步工具類(lèi),它可以讓一個(gè)或多個(gè)線(xiàn)程等待其他線(xiàn)程完成操作后再繼續(xù)執(zhí)行。

具體來(lái)說(shuō),CountDownLatch有兩個(gè)主要方法:

  1. await()方法:調(diào)用該方法的線(xiàn)程會(huì)進(jìn)入等待狀態(tài),直到計(jì)數(shù)器的值為0或者被中斷;
  2. countDown()方法:調(diào)用該方法會(huì)將計(jì)數(shù)器減1,當(dāng)計(jì)數(shù)器的值為0時(shí),會(huì)喚醒所有等待的線(xiàn)程。
public class T07_00_sync_wait_notify {

    private static CountDownLatch latch = new CountDownLatch(1);

    public static void main(String[] args) {
        final Object o = new Object();



        char[] aI = "1234567".toCharArray();
        char[] aC = "ABCDEFG".toCharArray();

        new Thread(()->{
            try {
                latch.await();
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }

            synchronized (o) {
                for(char c : aI) {
                    System.out.print(c);
                    try {
                        o.notify();
                        o.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }

                o.notify();
            }
        }, "t1").start();

        new Thread(()->{

            synchronized (o) {
                for(char c : aC) {
                    System.out.print(c);
                    latch.countDown();
                    try {
                        o.notify();
                        o.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                o.notify();
            }
        }, "t2").start();
    }
}

運(yùn)行結(jié)果:

圖片圖片

3. 使用ReentrantLock

我們可以通過(guò)ReentrantLock獲取條件鎖,通過(guò)它提供的方法來(lái)實(shí)現(xiàn)。

具體來(lái)說(shuō),ReentrantLock的Condition接口提供了以下三個(gè)方法:

  1. await()方法:當(dāng)前線(xiàn)程進(jìn)入等待狀態(tài),并釋放鎖,直到其他線(xiàn)程使用signal()或signalAll()方法喚醒它;
  2. signal()方法:?jiǎn)拘岩粋€(gè)等待在該條件上的線(xiàn)程;
  3. signalAll()方法:?jiǎn)拘阉械却谠摋l件上的線(xiàn)程。
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class T08_00_lock_condition {

    public static void main(String[] args) {

        char[] aI = "1234567".toCharArray();
        char[] aC = "ABCDEFG".toCharArray();

        Lock lock = new ReentrantLock();
        Condition condition = lock.newCondition();

        new Thread(()->{
            try {
                lock.lock();

                for(char c : aI) {
                    System.out.print(c);
                    condition.signal();
                    condition.await();
                }

                condition.signal();

            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                lock.unlock();
            }

        }, "t1").start();

        new Thread(()->{
            try {
                lock.lock();

                for(char c : aC) {
                    System.out.print(c);
                    condition.signal();
                    condition.await();
                }

                condition.signal();

            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                lock.unlock();
            }

        }, "t2").start();
    }
}

運(yùn)行結(jié)果:

圖片圖片

Condition本質(zhì)是鎖資源上不同的等待隊(duì)列,我們也可以獲取不同的等待隊(duì)列來(lái)實(shí)現(xiàn)。

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class T09_00_lock_condition {

    public static void main(String[] args) {

        char[] aI = "1234567".toCharArray();
        char[] aC = "ABCDEFG".toCharArray();

        Lock lock = new ReentrantLock();
        Condition conditionT1 = lock.newCondition();
        Condition conditionT2 = lock.newCondition();

        new Thread(()->{
            try {
                lock.lock();

                for(char c : aI) {
                    System.out.print(c);
                    conditionT2.signal();
                    conditionT1.await();
                }

                conditionT2.signal();

            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                lock.unlock();
            }

        }, "t1").start();

        new Thread(()->{
            try {
                lock.lock();

                for(char c : aC) {
                    System.out.print(c);
                    conditionT1.signal();
                    conditionT2.await();
                }

                conditionT1.signal();

            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                lock.unlock();
            }

        }, "t2").start();
    }
}

4. 使用TransferQueue阻塞隊(duì)列

TransferQueue是Java并發(fā)包中的一個(gè)阻塞隊(duì)列,它可以用于多線(xiàn)程之間的數(shù)據(jù)交換和同步。

LinkedTransferQueue繼承自TransferQueue,并且還可以支持異步操作。

圖片圖片

LinkedTransferQueue的take()方法和transfer()方法都是用于從隊(duì)列中取出元素的方法,但它們的使用場(chǎng)景和行為有所不同。

take()方法是一個(gè)阻塞方法,它會(huì)一直阻塞直到隊(duì)列中有可用元素,才將隊(duì)列中的元素取出并返回。

transfer()方法也是一個(gè)阻塞方法,它會(huì)將指定的元素插入到隊(duì)列中,并等待另一個(gè)線(xiàn)程從隊(duì)列中取出該元素。如果隊(duì)列中沒(méi)有等待的線(xiàn)程,則當(dāng)前線(xiàn)程會(huì)一直阻塞,直到有其他線(xiàn)程從隊(duì)列中取走該元素為止。

那么我們就利用這一點(diǎn)它必須要另外一個(gè)線(xiàn)程來(lái)取進(jìn)而實(shí)現(xiàn)把值交替輸出。

import java.util.concurrent.LinkedTransferQueue;
import java.util.concurrent.TransferQueue;

public class T13_TransferQueue {
    public static void main(String[] args) {
        char[] aI = "1234567".toCharArray();
        char[] aC = "ABCDEFG".toCharArray();

        TransferQueue<Character> queue = new LinkedTransferQueue<Character>();
        new Thread(()->{
            try {
                for (char c : aI) {
                    System.out.print(queue.take());
                    queue.transfer(c);
                }

            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }, "t1").start();

        new Thread(()->{
            try {
                for (char c : aC) {
                    queue.transfer(c);
                    System.out.print(queue.take());
                }

            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }, "t2").start();
    }
}

運(yùn)行結(jié)果:

圖片圖片

5. 使用LockSupport

LockSupport是Java并發(fā)包中的一個(gè)工具類(lèi),它可以用于線(xiàn)程的阻塞和喚醒。

你可以把它類(lèi)比成Object的wait()和notify()方法,但LockSupport是比它們更加靈活和可控的。

LockSupport提供了park()和unpark()方法:

當(dāng)一個(gè)線(xiàn)程調(diào)用park()方法時(shí),它會(huì)被阻塞,直到另一個(gè)線(xiàn)程調(diào)用該線(xiàn)程的unpark()方法才會(huì)被喚醒。

如果調(diào)用unpark()方法時(shí),該線(xiàn)程還沒(méi)有調(diào)用park()方法,則該線(xiàn)程調(diào)用park()方法時(shí)不會(huì)被阻塞,可以直接返回。

import java.util.concurrent.locks.LockSupport;

//Locksupport park 當(dāng)前線(xiàn)程阻塞(停止)
//unpark(Thread t)

public class T02_00_LockSupport {


    static Thread t1 = null, t2 = null;

    public static void main(String[] args) throws Exception {
        char[] aI = "1234567".toCharArray();
        char[] aC = "ABCDEFG".toCharArray();

        t1 = new Thread(() -> {

                for(char c : aI) {
                    System.out.print(c);
                    LockSupport.unpark(t2); //叫醒T2
                    LockSupport.park(); //T1阻塞
                }

        }, "t1");

        t2 = new Thread(() -> {

            for(char c : aC) {
                LockSupport.park(); //t2阻塞
                System.out.print(c);
                LockSupport.unpark(t1); //叫醒t1
            }

        }, "t2");

        t1.start();
        t2.start();
    }
}

運(yùn)行結(jié)果:

圖片圖片

6. 使用枚舉類(lèi)作同步標(biāo)志

創(chuàng)建一個(gè)枚舉類(lèi)ReadyToRun,利用while(true)死等和枚舉類(lèi)指向?qū)ο蟛煌鳂?biāo)志位交替輸出。

public class T03_00_cas {

    enum ReadyToRun {T1, T2}

    static volatile ReadyToRun r = ReadyToRun.T1; 

    public static void main(String[] args) {

        char[] aI = "1234567".toCharArray();
        char[] aC = "ABCDEFG".toCharArray();

        new Thread(() -> {

            for (char c : aI) {
                while (r != ReadyToRun.T1) {}
                System.out.print(c);
                r = ReadyToRun.T2;
            }

        }, "t1").start();

        new Thread(() -> {

            for (char c : aC) {
                while (r != ReadyToRun.T2) {}
                System.out.print(c);
                r = ReadyToRun.T1;
            }
        }, "t2").start();
    }
}

運(yùn)行結(jié)果:

圖片圖片

總結(jié)

好了,關(guān)于這個(gè)面試題的解法了不起暫時(shí)就想到這6種情況。

這個(gè)面試題也是一道經(jīng)典的多線(xiàn)程面試題,如果你能將這幾種情況掌握,定會(huì)另面試官刮目相看。

如果你們還有新的方法歡迎和了不起一起探討研究,畢竟代碼是死的人是活的。

責(zé)任編輯:武曉燕 來(lái)源: Java面試教程
相關(guān)推薦

2024-05-10 07:44:23

C#進(jìn)程程序

2024-08-28 11:10:53

2024-11-15 11:00:00

C#多線(xiàn)程

2011-05-26 10:55:39

2024-12-03 00:44:50

2009-08-12 18:04:44

編寫(xiě)C#多線(xiàn)程

2012-05-18 10:36:20

CC++編程

2021-03-05 07:38:52

C++線(xiàn)程編程開(kāi)發(fā)技術(shù)

2023-05-03 09:01:41

CanvasWebGL

2009-08-26 14:35:00

用C#實(shí)現(xiàn)HTTP協(xié)議

2024-12-30 06:00:00

C#線(xiàn)程編程

2015-03-24 13:46:29

C++多線(xiàn)程計(jì)數(shù)器特性實(shí)現(xiàn)

2011-09-07 10:00:53

Ubuntu3D

2021-02-25 15:58:46

C++線(xiàn)程編程開(kāi)發(fā)技術(shù)

2009-08-17 16:56:51

C#多線(xiàn)程控制進(jìn)度條

2010-02-05 15:30:54

C++多線(xiàn)程測(cè)試

2009-09-04 15:09:48

C#多線(xiàn)程啟動(dòng)Squa

2010-02-04 10:19:39

C++多線(xiàn)程

2010-01-18 14:09:58

C++多線(xiàn)程

2009-08-28 16:43:57

C#多線(xiàn)程學(xué)習(xí)
點(diǎn)贊
收藏

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

免费一级特黄特色毛片久久看| 91精品国产综合久久久久久久久久| 国产精品久久久久久影视| 亚洲午夜久久久久久久久红桃 | 日韩va亚洲va欧洲va国产| 夜夜添无码一区二区三区| 欧洲综合视频| 久久99国产乱子伦精品免费| 欧美激情xxxx| caopeng视频| 精品一区二区三区四区五区 | 偷偷操不一样的久久| 狠狠做六月爱婷婷综合aⅴ| 欧美精三区欧美精三区| 成人毛片一区二区| 欧美人xxx| 97aⅴ精品视频一二三区| 成人疯狂猛交xxx| 懂色av.com| 婷婷综合亚洲| 亚洲欧美精品在线| 能看毛片的网站| 成人va天堂| 亚洲一二三区视频在线观看| 亚洲精美视频| 香蕉视频黄色片| 国产精品一区免费在线观看| 国产经典一区二区| 国产乡下妇女做爰视频| 色婷婷亚洲mv天堂mv在影片| 精品国产一区二区三区久久影院 | 欧美日韩亚洲一区二区三区在线观看 | 日本人dh亚洲人ⅹxx| av日韩亚洲| 亚洲一区二区高清| a级黄色片网站| 国产中文在线观看| 99久久精品国产精品久久| 成人乱色短篇合集| 美女黄页在线观看| 久久高清一区| 91精品国产高清久久久久久91 | 国产成人在线一区| 可以免费看的av毛片| 欧美福利影院| 久久久99久久精品女同性| 久久丫精品忘忧草西安产品| 国产乱人伦精品一区| 日韩精品一区二区三区在线| 依人在线免费视频| 在线看欧美视频| 日韩欧美在线视频日韩欧美在线视频| 久久国产精品网| xxxx在线视频| 亚洲国产精品精华液网站| 91精品国产毛片武则天| 福利在线视频网站| 亚洲色欲色欲www在线观看| 亚洲福利av在线| av中文天堂在线| 欧美极品少妇xxxxⅹ高跟鞋| 欧美日韩一区二区三| 欧美人体大胆444www| 93久久精品日日躁夜夜躁欧美| 国产欧美一区二区三区另类精品| 国产 欧美 自拍| 成人在线视频首页| 国产一区二区高清视频| 头脑特工队2在线播放| 91视频91自| 日本一区不卡| 丝袜美腿美女被狂躁在线观看| 国产女人aaa级久久久级| 亚洲人久久久| 国产在线观看91| 亚洲精品v日韩精品| 无码粉嫩虎白一线天在线观看 | 久久精品亚洲天堂| 亚洲国产欧美在线观看| 亚洲成人在线视频播放| 最新中文字幕视频| 日韩一区欧美| 欧美猛男性生活免费| 日韩精品一区二区三| 久久久久国产精品午夜一区| 国产精品三级久久久久久电影| 91精品国产乱码久久久| 福利一区二区在线| 久久精品国产第一区二区三区最新章节 | 欧美中文字幕一二三区视频| 亚洲欧美国产中文| 色悠久久久久综合先锋影音下载| 欧美猛男同性videos| 国产一区二区三区蝌蚪| 51国偷自产一区二区三区的来源| av无码精品一区二区三区宅噜噜| 欧美性天天影视| 亚洲综合在线视频| 女人和拘做爰正片视频| 成人看片在线观看| 欧美一区二区三级| 星空大象在线观看免费播放| 国产成人精品999在线观看| 深夜福利日韩在线看| 国产亚洲欧美精品久久久久久| 免费精品视频| 成人免费网视频| 亚洲三级中文字幕| 中文字幕综合网| 欧美三级在线观看视频| 日本精品久久| 亚洲九九九在线观看| 我要看黄色一级片| 久久久久综合| 国产91精品入口17c| xxxxx日韩| 亚洲成a人v欧美综合天堂下载| 久久国产波多野结衣| 中文字幕乱码在线播放| 欧美日本精品一区二区三区| 97人妻精品一区二区三区免费| 亚洲女人18毛片水真多| 成人午夜在线播放| 亚洲激情电影在线| 色综合桃花网| 日韩色在线观看| 精品一区二区三区蜜桃在线| 国产大片一区二区| 38少妇精品导航| 国产孕妇孕交大片孕| 91在线免费播放| 黄在线免费观看| 国产精品sm| 国产精品扒开腿爽爽爽视频| 成人丝袜18视频在线观看| 92国产精品久久久久首页| 欧美女v视频| 亚洲国产视频a| 国产成人美女视频| 国产一级视频在线观看| 久久精品国产成人一区二区三区 | 国产黄人亚洲片| 亚洲图片小说在线| 3d欧美精品动漫xxxx无尽| 日韩黄色高清视频| 99热只有这里有精品| 9人人澡人人爽人人精品| 久久久久久久久影视| 99久久999| 久久久精品一区二区| 亚洲熟女乱色一区二区三区久久久 | 三上亚洲一区二区| 国产精品久久久久久久久免费看 | 精品国产鲁一鲁****| 日韩中文字幕亚洲| 91成人在线免费| 中文字幕一区二区三区av| 最新中文字幕免费视频| 不卡视频在线| 国产日产亚洲精品| 日本视频不卡| 欧美日韩aaaaa| 久久国产高清视频| 国产精品正在播放| 免费人成自慰网站| 欧美日韩一区二区三区不卡视频| 久久久亚洲精选| 日本激情一区二区| 欧美午夜电影在线| 免费成人深夜天涯网站| 日韩高清不卡一区二区| 亚洲一区三区在线观看| 在线高清欧美| 欧美精品999| 四虎在线视频| 91国偷自产一区二区开放时间| 成人性生交大片免费看无遮挡aⅴ| 蜜桃av噜噜一区| 97超碰免费观看| 国产91精品入| 日本国产欧美一区二区三区| 99精品老司机免费视频| 8v天堂国产在线一区二区| 欧美国产日韩综合| www激情久久| 国产小视频精品| 午夜精彩国产免费不卡不顿大片| 国产一区二区三区四区hd| 亚洲第一会所001| 美女久久久久久久久久久| 免费观看的毛片| 欧美日韩一区小说| 欧美黑人精品一区二区不卡| 91麻豆免费观看| 国产三级生活片| 亚洲国产91| 天堂精品一区二区三区| 伊人精品综合| 国产精彩精品视频| 日本天码aⅴ片在线电影网站| 精品视频偷偷看在线观看| 一区二区三区在线免费观看视频| 一区二区三区 在线观看视频| 久久国产精品影院| 国产乱码精品一区二区三区五月婷| 国产九九九九九| 日韩在线观看| 久久伊人一区| 视频在线观看免费影院欧美meiju 视频一区中文字幕精品 | 一本色道久久综合亚洲91| 蜜桃av.com| 91色视频在线| 亚洲成a人无码| 日韩二区三区在线观看| 国产自产在线视频| 欧美电影免费| 欧美三日本三级少妇三99| caoporn成人| 国产在线播放不卡| 深夜成人影院| 91sa在线看| 亚洲精品一二三**| 欧美日韩国产色站一区二区三区| 久久久久久久黄色| 久久精品欧美一区二区三区不卡 | 亚洲aⅴ日韩av电影在线观看| 福利小视频在线| 日日摸夜夜添一区| 黄色软件在线| 亚洲国产天堂久久综合网| 国产绿帽刺激高潮对白| 欧美在线观看18| 欧美一区二区激情视频| 亚洲永久免费视频| 国产精品嫩草影院俄罗斯| 中文文精品字幕一区二区| 少妇光屁股影院| 99视频超级精品| 在线观看亚洲免费视频| 毛片在线播放视频| 日韩黄色av| 国产精品一香蕉国产线看观看 | 又紧又大又爽精品一区二区| 1024手机在线观看你懂的| 久久久亚洲午夜电影| 久久久久9999| aa级大片欧美| 中文字幕天堂网| 成人激情免费电影网址| 天堂va欧美va亚洲va老司机| 国产激情一区二区三区四区| 国产免费中文字幕| 黄一区二区三区| 国产精品探花在线播放| 精品午夜一区二区三区在线观看| 久久久精品麻豆| 免费高清不卡av| 亚洲欧美久久久久| 蜜臀av性久久久久蜜臀aⅴ四虎| 精品少妇无遮挡毛片| 久久婷婷激情| 四季av一区二区三区| 九九**精品视频免费播放| 午夜激情视频网| 国产一区二区三区四| 国产裸体视频网站| av电影一区二区| 人妻丰满熟妇av无码久久洗澡| 久久老女人爱爱| 亚洲天堂精品一区| 亚洲美女视频在线| 偷偷操不一样的久久| 日本道精品一区二区三区 | 91麻豆精品国产| 99在线观看精品视频| 精品福利一区二区三区免费视频| 欧美一级性视频| 亚洲欧美国产一本综合首页| 在线观看免费网站黄| 欧美精品性视频| 成全电影大全在线观看| 亲子乱一区二区三区电影| 精品日本视频| 99久久免费国| 四虎884aa成人精品最新| 亚洲成人午夜在线| 欧美另类专区| 黑森林福利视频导航| 激情综合网最新| 一级国产黄色片| 国产精品福利一区二区| 日韩激情一区二区三区| 欧洲一区二区av| 亚洲精品字幕在线| 伊人久久久久久久久久久| 国产cdts系列另类在线观看| 欧美亚洲另类激情另类| 色综合视频一区二区三区日韩| 国产美女精品久久久| 欧美午夜精彩| 日韩黄色短视频| 久久精品国产亚洲a| 久久久久国产精品无码免费看| 国产精品久久夜| 日本在线小视频| 欧美日韩成人一区二区| 天天舔天天干天天操| 久久精品免费播放| 欧美第一视频| 国产精品亚洲不卡a| 色婷婷亚洲mv天堂mv在影片| 日韩欧美国产免费| 国产老肥熟一区二区三区| 欧美另类z0zx974| 亚洲.国产.中文慕字在线| 国产又大又粗又硬| 亚洲欧美一区二区激情| 久草在线新免费首页资源站| 成人av色在线观看| 精品久久久久中文字幕小说| 免费拍拍拍网站| 国产综合色视频| аⅴ天堂中文在线网| 精品国产户外野外| 理论片中文字幕| 久久国产天堂福利天堂| 成人在线黄色| 欧美最大成人综合网| 亚洲美女啪啪| 久草免费资源站| 亚洲乱码日产精品bd| 中文字幕资源网| 亚洲欧美一区二区三区在线| 9lporm自拍视频区在线| 翡翠波斯猫1977年美国| 亚洲最大av| 亚洲第一天堂久久| 国产精品久久久久婷婷| 91麻豆精品在线| 国产性色av一区二区| 亚洲精品福利电影| 精品国产乱码久久久久久108| 韩日在线一区| 永久av免费在线观看| 亚洲人成人一区二区在线观看| 97人人爽人人爽人人爽| 日韩性xxxx爱| 成人自拍视频| 激情五月五月婷婷| 激情深爱一区二区| 免费高清在线观看电视| 91精品福利在线一区二区三区 | 国模精品视频一区二区三区| 国产精品网址| 免费看的黄色大片| 久久亚洲一区二区三区四区| 无码人妻丰满熟妇精品| 国产亚洲xxx| 欧美激情啪啪| 成年人黄色在线观看| 国产宾馆实践打屁股91| 福利一区二区三区四区| 亚洲精品小视频在线观看| 欧美专区福利免费| 午夜精品美女久久久久av福利| 毛片一区二区三区| 亚洲熟女www一区二区三区| 精品免费99久久| 精品捆绑调教一区二区三区| 欧美日韩亚洲综合一区二区三区激情在线| 久久久久99| 91免费在线看片| 欧美一级欧美三级| 老色鬼在线视频| 日本一区二区三区精品视频| 美洲天堂一区二卡三卡四卡视频 | 国产福利成人在线| 亚洲澳门在线| 波多野结衣一二三区| 色婷婷国产精品| 黄色片网站在线观看| 国产精品大全| 久久综合九色| 欧美特黄一级片| 亚洲精品成人网| www.精品国产| 人人妻人人澡人人爽欧美一区 | 欧美久久久久久蜜桃| 色在线视频网| 免费中文日韩| 国产伦精品一区二区三区视频青涩 | 久久精品亚洲一区二区三区浴池| 一二三四区视频| 久久久久日韩精品久久久男男| 蜜桃一区二区| 国产乱淫av麻豆国产免费| 在线免费观看日本一区| 婷婷色在线播放| 日韩欧美精品久久| 懂色中文一区二区在线播放|