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

說一下線程池的核心參數,線程池的執行原理

開發
今天一起來說一下線程池的核心參數,線程池的執行原理,大家都知道嗎?

1.線程池的核心參數

線程池七大核心參數如下所示:

public ThreadPoolExecutor(int corePoolSize,
        int maximumPoolSize, 
        long keepAliveTime, 
        TimeUnit unit, 
        BlockingQueue<Runnable> workQueue,
        ThreadFactory threadFactory,
        RejectedExecutionHandler handler
        )
  • corePoolSize: 核心線程數目
  • maximumPoolSize: 最大線程數目 = (核心線程+救急線程的最大數目)
  • keepAliveTime: 生存時間 - 救急線程的生存時間,生存時間內沒有新任務,此線程資源會釋放
  • unit: 時間單位 , 救急線程的生存時間單位,如秒、毫秒等
  • workQueue: 當沒有空閑核心線程時,新來任務會加入到此隊列排隊,隊列滿會創建救急線程執行任務
  • **threadFactory: 線程工廠 , 可以定制線程對象的創建,例如設置線程名字、是否是守護線程等
  • handler 拒絕策略 - 當所有線程都在繁忙,workQueue 也放滿時,會觸發拒絕策略

思考:線程池的執行原理知道嘛?

2. 線程池的執行原理

1: 任務在提交的時候,首先判斷核心線程數是否已滿,如果沒有滿則直接添加到工作線程執行

2: 如果核心線程數滿了,則判斷阻塞隊列是否已滿,如果沒有滿,當前任務存入阻塞隊列

3:如果阻塞隊列也滿了,則判斷線程數是否小于最大線程數,如果滿足條件,則使用臨時線程執行任務如果核心或臨時線程執行完成任務后會檢查阻塞隊列中是否有需要執行的線程,如果有,則使用非核心線程執行任務

4:如果所有線程都在忙著(核心線程+臨時線程),則走拒絕策略

思考:拒絕策略有哪些?

1.AbortPolicy:直接拋出異常,默認策略

2.CallerRunsPolicy:用調用者所在的線程來執行任務

3.DiscardOldestPolicy:丟棄阻塞隊列中靠最前的任務,并執行當前任務

4.DiscardPolicy:直接丟棄任務

案例:

public class TestThreadPoolExecutor {

    static class MyTask implements Runnable {
        private final String name;
        private final long duration;

        public MyTask(String name) {
            this(name, 0);
        }

        public MyTask(String name, long duration) {
            this.name = name;
            this.duration = duration;
        }

        @Override
        public void run() {
            try {
                LoggerUtils.get("myThread").debug("running..." + this);
                Thread.sleep(duration);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        @Override
        public String toString() {
            return "MyTask(" + name + ")";
        }
    }

    public static void main(String[] args) throws InterruptedException {
        AtomicInteger c = new AtomicInteger(1);
        ArrayBlockingQueue<Runnable> queue = new ArrayBlockingQueue<>(2);
        ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
                2,
                3,
                0,
                TimeUnit.MILLISECONDS,
                queue,
                r -> new Thread(r, "myThread" + c.getAndIncrement()),
                new ThreadPoolExecutor.AbortPolicy());
        showState(queue, threadPool);
        threadPool.submit(new MyTask("1", 3600000));
        showState(queue, threadPool);
        threadPool.submit(new MyTask("2", 3600000));
        showState(queue, threadPool);
        threadPool.submit(new MyTask("3"));
        showState(queue, threadPool);
        threadPool.submit(new MyTask("4"));
        showState(queue, threadPool);
        threadPool.submit(new MyTask("5",3600000));
        showState(queue, threadPool);
        threadPool.submit(new MyTask("6"));
        showState(queue, threadPool);
    }

    private static void showState(ArrayBlockingQueue<Runnable> queue, ThreadPoolExecutor threadPool) {
        try {
            Thread.sleep(300);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        List<Object> tasks = new ArrayList<>();
        for (Runnable runnable : queue) {
            try {
                Field callable = FutureTask.class.getDeclaredField("callable");
                callable.setAccessible(true);
                Object adapter = callable.get(runnable);
                Class<?> clazz = Class.forName("java.util.concurrent.Executors$RunnableAdapter");
                Field task = clazz.getDeclaredField("task");
                task.setAccessible(true);
                Object o = task.get(adapter);
                tasks.add(o);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        LoggerUtils.main.debug("pool size: {}, queue: {}", threadPool.getPoolSize(), tasks);
    }

}

思考:線程池中有哪些常見的阻塞隊列?

3. 常見阻塞隊列

workQueue: 當沒有空閑核心線程時,新來任務會加入到此隊列排隊,隊列滿會創建救急線程執行任務。

比較常見的有4個,用的最多是ArrayBlockingQueue和LinkedBlockingQueue。

  • 1.ArrayBlockingQueue:基于數組結構的有界阻塞隊列
  • 2.LinkedBlockingQueue:基于鏈表結構的有界阻塞隊列
  • 3.DelayedWorkQueue :是一個優先級隊列,它可以保證每次出隊的任務都是當前隊列中執行時間最靠前的
  • 4.SynchronousQueue:不存儲元素的阻塞隊列,每個插入操作都必須等待一個移出操作

3.1. ArrayBlockingQueue的LinkedBlockingQueue區別

inkedBlockingQueue**

ArrayBlockingQueue

默認無界,支持有界

強制有界

底層是鏈表

底層是數組

是懶惰的,創建節點的時候添加數據

提前初始化 Node  數組

入隊會生成新 Node

Node需要是提前創建好的

兩把鎖(頭尾)

一把鎖

左邊是LinkedBlockingQueue加鎖的方式,右邊是ArrayBlockingQueue加鎖的方式

  • LinkedBlockingQueue:讀和寫各有一把鎖,性能相對較好
  • ArrayBlockingQueue:只有一把鎖,讀和寫公用,性能相對于LinkedBlockingQueue差一些

4. 線程池的種類有哪些

在java.util.concurrent.Executors類中提供了大量創建連接池的靜態方法,常見就有四種

1.創建使用固定線程數的線程池

public static ExecutorService newFixedThreadPool(int nThreads) {
        return new ThreadPoolExecutor(nThreads, 
                                      0L, 
                                      TimeUnit.MILLISECONDS, 
                                      new LinkedBlockingQueue<>());
    }
  • 核心線程數與最大線程數一樣,沒有救急線程
  • 阻塞隊列是LinkedBlockingQueue,最大容量為Integer.MAX_VALUE
  • 適用場景:適用于任務量已知,相對耗時的任務
  • 案例
/**
 * @author springboot葵花寶典
 * @description: TODO
 */
public class FixedThreadPoolTest {

    static class FixedThreadDemo implements Runnable{
        @Override
        public void run() {
            String name = Thread.currentThread().getName();
            for (int i = 0; i < 2; i++) {
                System.out.println(name + ":" + i);
            }
        }
    }

    public static void main(String[] args) throws InterruptedException {
        //創建一個固定大小的線程池,核心線程數和最大線程數都是3
        ExecutorService executorService = Executors.newFixedThreadPool(3);

        for (int i = 0; i < 5; i++) {
            executorService.submit(new FixedThreadDemo());
            Thread.sleep(10);
        }

        executorService.shutdown();
    }

}

2.單線程化的線程池,它只會用唯一的工作線程來執行任 務,保證所有任務按照指定順序(FIFO)執行

public static ExecutorService newSingleThreadExecutor() {
        return new FinalizableDelegatedExecutorService
        (new ThreadPoolExecutor(1, 
        1, 
        0L,
        TimeUnit.MILLISECONDS, 
        new LinkedBlockingQueue<>()));
    }
  • 核心線程數和最大線程數都是1
  • 阻塞隊列是LinkedBlockingQueue,最大容量為Integer.MAX_VALUE
  • 適用場景:適用于按照順序執行的任務
  • 案例
/**
 * @author springboot葵花寶典
 * @description: TODO
 */
public class NewSingleThreadTest {
    static int count = 0;

    static class Demo implements Runnable {
        @Override
        public void run() {
            count++;
            System.out.println(Thread.currentThread().getName() + ":" + count);
        }
    }

    public static void main(String[] args) throws InterruptedException {
        //單個線程池,核心線程數和最大線程數都是1
        ExecutorService exec = Executors.newSingleThreadExecutor();

        for (int i = 0; i < 10; i++) {
            exec.execute(new Demo());
            Thread.sleep(5);
        }
        exec.shutdown();
    }
}
  1. 可緩存線程池
public static ExecutorService newCachedThreadPool() {
        return new ThreadPoolExecutor(0,
                                    Integer.MAX_VALUE, 
                                    60L,
                                    TimeUnit.SECONDS, n
                                    ew SynchronousQueue<>());
    }
  • 核心線程數為0
  • 最大線程數是Integer.MAX_VALUE
  • 阻塞隊列為SynchronousQueue:不存儲元素的阻塞隊列,每個插入操作都必須等待一個移出操作
  • 適用場景:適合任務數比較密集,但每個任務執行時間較短的情況
  • 案例:
/**
 * @author springboot葵花寶典
 * @description: TODO
 */
public class CachedThreadPoolTest {
    static class Demo implements Runnable {
        @Override
        public void run() {
            String name = Thread.currentThread().getName();
            try {
                //修改睡眠時間,模擬線程執行需要花費的時間
                Thread.sleep(100);

                System.out.println(name + "執行完了");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) throws InterruptedException {
        //創建一個緩存的線程,沒有核心線程數,最大線程數為Integer.MAX_VALUE
        ExecutorService exec = Executors.newCachedThreadPool();
        for (int i = 0; i < 10; i++) {
            exec.execute(new Demo());
            Thread.sleep(1);
        }
        exec.shutdown();
    }
}

4.提供了“延遲”和“周期執行”功能的ThreadPoolExecutor

public ScheduledThreadPoolExecutor(int corePoolSize,
                                   ThreadFactory threadFactory,
                                   RejectedExecutionHandler handler{
 super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS, new DelayedWorkQueue(), threadFactory, handler);                     
}
  • 適用場景:有定時和延遲執行的任務
  • 案例
/**
 * @author springboot葵花寶典
 * @description: TODO
 */
public class ScheduledThreadPoolTest {
    static class Task implements Runnable {
        @Override
        public void run() {
            try {
                String name = Thread.currentThread().getName();

                System.out.println(name + ", 開始:" + new Date());
                Thread.sleep(1000);
                System.out.println(name + ", 結束:" + new Date());

            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) throws InterruptedException {
        //按照周期執行的線程池,核心線程數為2,最大線程數為Integer.MAX_VALUE
        ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(2);
        System.out.println("程序開始:" + new Date());

        /**
         * schedule 提交任務到線程池中
         * 第一個參數:提交的任務
         * 第二個參數:任務執行的延遲時間
         * 第三個參數:時間單位
         */
        scheduledThreadPool.schedule(new Task(), 0, TimeUnit.SECONDS);
        scheduledThreadPool.schedule(new Task(), 1, TimeUnit.SECONDS);
        scheduledThreadPool.schedule(new Task(), 5, TimeUnit.SECONDS);

        Thread.sleep(5000);

        // 關閉線程池
        scheduledThreadPool.shutdown();

    }
}

5. 線程池面試題

面試官:線程池的核心參數有哪些?

候選人:

在線程池中一共有7個核心參數:

  1. corePoolSize 核心線程數目 - 池中會保留的最多線程數
  2. maximumPoolSize 最大線程數目 - 核心線程+救急線程的最大數目
  3. keepAliveTime 生存時間 - 救急線程的生存時間,生存時間內沒有新任務,此線程資源會釋放
  4. unit 時間單位 - 救急線程的生存時間單位,如秒、毫秒等
  5. workQueue - 當沒有空閑核心線程時,新來任務會加入到此隊列排隊,隊列滿會創建救急線程執行任務
  6. threadFactory 線程工廠 - 可以定制線程對象的創建,例如設置線程名字、是否是守護線程等
  7. handler 拒絕策略 - 當所有線程都在繁忙,workQueue 也放滿時,會觸發拒絕策略

在拒絕策略中又有4中拒絕策略

  • 第一種是AbortPolicy,之際拋異常
  • 第二種是CallerRunsPolicy由調用者執行任務
  • 第三是DiscardOldestPolicy丟棄當前的任務
  • 第四是DiscardPolicy丟棄最早排隊任務。默認是直接拋異常。

面試官:線程池的執行原理知道嗎?

候選人:

首先判斷線程池里的核心線程是否都在執行任務,如果不是則創建一個新的工作線程來執行任務。如果核心線程都在執行任務,則線程池判斷工作隊列是否已滿,如果工作隊列沒有滿,則將新提交的任務存儲在這個工作隊 列里。如果工作隊列滿了,則判斷線程池里的線程是否都處于工作狀態,如果沒有,則創建一個新的工作線程來執行任 務。如果已經滿了,則交給拒絕策略來處理這個任務。

面試官:線程池的種類有哪些?

候選人:

在jdk中默認提供了4中方式創建線程池

  • 第一個是:newCachedThreadPool創建一個可緩存線程池,如果線程池長度超過處理需要,可靈活回 收空閑線程,若無可回收,則新建線程。
  • 第二個是:newFixedThreadPool 創建一個定長線程池,可控制線程最大并發數,超出的線程會在隊列 中等待。
  • 第三個是:newScheduledThreadPool 創建一個定長線程池,支持定時及周期性任務執行。
  • 第四個是:newSingleThreadExecutor 創建一個單線程化的線程池,它只會用唯一的工作線程來執行任 務,保證所有任務按照指定順序(FIFO, LIFO, 優先級)執行。
責任編輯:華軒 來源: springboot葵花寶典
相關推薦

2022-03-09 07:35:24

線程池線程參數

2011-08-09 15:25:14

線程池數據庫連接池

2021-06-02 11:25:18

線程池Java代碼

2022-06-06 15:33:20

線程Java釋放鎖

2012-05-15 02:18:31

Java線程池

2022-11-09 09:01:08

并發編程線程池

2021-02-01 08:28:24

Linux線程池Linux系統

2020-12-10 08:24:40

線程池線程方法

2021-09-11 07:32:15

Java線程線程池

2024-07-15 08:20:24

2022-02-17 08:02:08

線程Java生命周期

2021-07-31 22:20:00

線程池系統參數

2009-07-22 09:39:18

CLR線程池

2021-07-16 11:35:20

Java線程池代碼

2020-03-05 15:34:16

線程池C語言局域網

2022-09-26 00:48:14

線程池阻塞數據

2017-02-08 13:03:40

Java線程池框架

2024-03-11 08:15:43

參數線程池方法

2025-08-04 09:00:00

線程池拒絕策略開發

2023-05-19 08:01:24

Key消費場景
點贊
收藏

51CTO技術棧公眾號

国产精品久久久久久影院8一贰佰 国产精品久久久久久麻豆一区软件 | 精品欧美午夜寂寞影院| 香蕉久久一区二区不卡无毒影院| 国产三区精品| 在线观看国产一区二区三区| 欧美欧美全黄| 国产午夜精品全部视频播放| 丰满少妇中文字幕| 欧美日韩免费看片| 亚洲情趣在线观看| 鲁丝一区鲁丝二区鲁丝三区| 一级黄在线观看| 伊人久久大香线蕉av超碰演员| 在线观看久久久久久| 337p日本欧洲亚洲大胆张筱雨| 成人在线爆射| 亚洲国产精品影院| 宅男一区二区三区| 日韩电影网址| 国产ts人妖一区二区| 国产精品久久久av| 日韩 欧美 亚洲| 综合久久久久| 在线丨暗呦小u女国产精品| 中文字幕在线视频播放| 国产剧情一区二区在线观看| 日本久久精品电影| 妺妺窝人体色777777| 免费观看在线黄色网| 久久久久久久久久看片| 国产91一区二区三区| 一级黄在线观看| 老司机久久99久久精品播放免费| 久久久久久久久国产| 91免费公开视频| 成人在线视频免费观看| 精品视频在线播放| 波多野结衣一二三区| 日日夜夜精品视频| 91精品国产手机| 91亚洲免费视频| 巨大黑人极品videos精品| 色综合一个色综合| 草草久久久无码国产专区| 色帝国亚洲欧美在线| 中文字幕字幕中文在线中不卡视频| 亚洲国产另类久久久精品极度| 日韩有码电影| 久久久一区二区| 欧美日韩一区二区三| 色婷婷中文字幕| 不卡的av网站| 国产视频精品网| 色wwwwww| 91香蕉视频黄| 免费av一区二区三区| 人操人视频在线观看| wwww国产精品欧美| 日韩欧美国产二区| jizz在线观看中文| 国产精品久久久久久福利一牛影视| 日韩免费av一区二区三区| 精品欧美不卡一区二区在线观看 | 3344国产永久在线观看视频| 亚洲综合激情另类小说区| 亚洲天堂第一区| 亚洲国产精品精华素| 亚洲一区二区三区在线看| 国产一区 在线播放| 蜜臀av在线| 精品美女永久免费视频| av观看免费在线| 中文另类视频| 欧美伦理视频网站| 麻豆tv在线观看| 亚洲8888| 色妞在线综合亚洲欧美| 美女的奶胸大爽爽大片| 国产综合婷婷| 8050国产精品久久久久久| 亚洲 日本 欧美 中文幕| 久久精品国产精品亚洲综合| 91中文在线观看| 无码精品黑人一区二区三区| 国产日韩av一区| av动漫免费观看| 国产91足控脚交在线观看| 精品国产老师黑色丝袜高跟鞋| 青青在线免费观看视频| 精品91福利视频| 亚洲国产又黄又爽女人高潮的| a天堂中文字幕| 久久久久美女| 人人做人人澡人人爽欧美| 国产又粗又大又爽视频| 丁香激情综合五月| 色阁综合av| 人妖欧美1区| 在线观看av不卡| 超碰在线超碰在线| 婷婷精品在线观看| 久久久国产成人精品| 香蕉免费毛片视频| 久久国产生活片100| 狠狠色噜噜狠狠狠狠色吗综合| 在线观看美女网站大全免费| 亚洲国产精品嫩草影院| 中文字幕欧美激情一区| 蜜桃免费一区二区三区| av在线麻豆| 欧美在线视频不卡| a天堂视频在线观看| 99久久亚洲精品蜜臀| 欧美在线视频a| 99久久久久久久| 国产日产欧美一区| 波多野结衣家庭教师在线| 亚洲a成人v| 一本色道久久综合亚洲精品小说| 国产一级在线免费观看| 久久99精品久久只有精品| 精品国产一区二区三区四区vr| 日本最新在线视频| 色综合欧美在线视频区| 亚洲精品乱码久久久久久蜜桃欧美| 欧洲grand老妇人| 欧美综合在线第二页| 丰满人妻妇伦又伦精品国产| 国产精品国产馆在线真实露脸| 成人av一级片| 国产成人在线中文字幕| 毛片精品免费在线观看| 中文字幕一区2区3区| 久久伊人中文字幕| 日韩小视频在线播放| 91精品麻豆| 中文字幕亚洲第一| 少妇一级淫片日本| 国产视频在线观看一区二区三区| 中文精品无码中文字幕无码专区| 精品国产亚洲日本| 麻豆成人在线看| 在线免费看91| 国产精品久久看| xxxx一级片| 精品久久91| 国产精品黄视频| 国产在线中文字幕| 91成人在线精品| 波多野结衣办公室33分钟| 日韩亚洲国产欧美| 精品一区二区三区国产| 变态调教一区二区三区| 欧美一区二区三区爱爱| 精品国产欧美日韩不卡在线观看 | 一区二区三区免费看视频| 国产欧美激情视频| 中文字幕一区二区三区久久网站 | 欧美激情性做爰免费视频| 国产精品欧美综合亚洲| 亚洲欧美日韩一区二区三区在线观看| 在线a免费观看| 综合天堂av久久久久久久| 91蜜桃网站免费观看| aa级大片免费在线观看| 亚洲成人在线网| 亚洲 欧美 日韩 综合| 国产午夜久久久久| 日日躁夜夜躁aaaabbbb| 亚洲自拍偷拍网| 国产一区二区免费在线观看| 亚洲天堂免费电影| 中文字幕欧美日韩| aaa级黄色片| 午夜一区二区三区视频| 日韩人妻一区二区三区| 久久精品久久综合| 国产尤物av一区二区三区| 啪啪国产精品| 国产精品爽黄69天堂a| 亚洲妇熟xxxx妇色黄| 日韩国产高清视频在线| 中文字幕免费在线看| 一区二区视频免费在线观看| 成人免费av片| 久久99久久99精品免视看婷婷 | 免费网站在线观看人| 精品中文视频在线| 97超碰资源站| 精品成人久久av| 国产精品18在线| 成人禁用看黄a在线| 韩国视频一区二区三区| 欧美日韩岛国| 午夜欧美性电影| 97久久综合区小说区图片区 | 国产第一页在线观看| 亚洲欧美中日韩| 真人bbbbbbbbb毛片| 九色porny丨国产精品| 亚洲美免无码中文字幕在线| 久久人体视频| 狠狠色综合网站久久久久久久| 成人在线免费av| 欧美亚洲国产视频小说| 久草中文在线| 亚洲欧美成人精品| 亚洲成人av综合| 欧美视频一区二区三区| 国产精品18p| 国产精品传媒入口麻豆| 日韩av在线看免费观看| 国产成人啪午夜精品网站男同| 妓院一钑片免看黄大片| 亚洲人成免费| 激情视频小说图片| 成人午夜国产| 欧洲精品国产| 女仆av观看一区| 91黄色国产视频| 黄色精品视频网站| 国产成人亚洲综合青青| 国产网站在线| 欧美交受高潮1| 在线播放免费av| 久久精品国产精品| 成人高清免费在线播放| 亚洲精品午夜精品| 外国精品视频在线观看 | 欧美精品欧美极品欧美激情| 国产激情一区二区三区四区| 精品久久久99| 蜜桃传媒麻豆第一区在线观看| 黄色a级片免费| 影音先锋在线播放| 国产精品久久久久久久久久免费看 | 日韩伦理在线一区| 欧美日韩福利在线观看| 看黄网站在线| 色妞一区二区三区| 亚洲精品承认| 色多多国产成人永久免费网站 | 2019日本中文字幕| 97超碰在线免费| 久久久久国产精品免费网站| 亚洲wwwww| 久久久亚洲影院| missav|免费高清av在线看| 国内精品久久久久| 国产夫妻在线播放| 欧美一区亚洲一区| 欧美自拍电影| 国产精品成人播放| 成人午夜在线| 91精品视频免费观看| 白嫩亚洲一区二区三区| 亚洲综合中文字幕在线观看| 视频一区在线| 国产精品污www一区二区三区| 国产精品sss在线观看av| 久久精品综合一区| 精品一区电影| 中文精品视频一区二区在线观看| 在线免费观看日本欧美爱情大片| 亚洲国产精品影视| 欧美~级网站不卡| 国产欧美久久久久| 在线综合欧美| 人人干人人干人人| 国产精品一区二区久激情瑜伽| aaa黄色大片| 波多野结衣久久| 久久久久久国产免费| 亚洲插插视频| 国产啪精品视频| baoyu135国产精品免费| 久久av免费观看| 日韩大片在线| av网站手机在线观看| 久久精品在线| 精品久久久99| 99久久久精品| 国产三级短视频| 一区二区三区欧美亚洲| 国产原创视频在线| 555夜色666亚洲国产免| 黄色美女一级片| 亚洲一品av免费观看| 呦呦在线视频| 国产精品久久久久久中文字| 久久亚洲精精品中文字幕| 久久99欧美| 久久精品影视| 欧美aⅴ在线观看| 国产精品中文欧美| 久久久视频6r| 亚洲妇女屁股眼交7| 中文在线资源天堂| 精品久久久三级丝袜| 成人在线免费视频| 久久久视频在线| 激情亚洲小说| 久久精品美女| 伊人久久大香线蕉精品组织观看| 妺妺窝人体色www在线小说| 激情图区综合网| 日韩在线免费观看av| 一区二区三区av电影| 中文字幕男人天堂| 亚洲欧美中文日韩v在线观看| 羞羞网站在线免费观看| 国产精品免费一区| 精品一区欧美| 极品美女扒开粉嫩小泬| 国产精品一二三四五| 国产日韩精品中文字无码| 一本久久a久久精品亚洲| 黄色aaa毛片| 久久精品视频99| 激情小说亚洲| 五月天亚洲综合情| 日韩黄色在线观看| 久久精品综合视频| 亚洲国产精品欧美一二99| 99在线无码精品入口| 色偷偷噜噜噜亚洲男人的天堂| 欧美gv在线| 国产日韩一区欧美| 国产精品第十页| 欧美人与性动交α欧美精品| 一区二区中文字幕在线| 中文字幕在线2018| 一色桃子一区二区| 欧美日一区二区三区| 欧美精彩一区二区三区| 国产视频一区在线观看一区免费| 亚洲精品国产福利| 国产高清一区在线观看| 国产va免费精品高清在线| 首页亚洲中字| 韩国日本在线视频| 国产亚洲欧美激情| 日本免费精品视频| 亚洲人成网站999久久久综合| 毛片在线网站| 欧美一区二区综合| 日韩精品久久理论片| 97在线观看免费视频| 欧美日韩综合在线| 男人资源在线播放| 韩日精品视频一区| 日本黄网免费一区二区精品| 在线看片日韩| 亚洲精品久久一区二区三区777| 亚洲精品国产视频| 性猛交富婆╳xxx乱大交天津| 欧美日韩国产成人在线观看| aaa国产精品| 国产91在线免费| 久久久久高清精品| 一级特黄色大片| 久久成人一区二区| 99精品国产高清一区二区麻豆| 97干在线视频| 久久久精品免费免费| 亚洲熟妇无码久久精品| 久久久国产视频| 哺乳挤奶一区二区三区免费看| 国产午夜福利100集发布| 国产午夜精品在线观看| 91中文字幕在线视频| 欧美激情欧美激情在线五月| 欧美日韩另类图片| 91视频免费版污| 亚洲男人天堂av| 天天摸夜夜添狠狠添婷婷| 国产精品久久97| 欧美在线不卡| 精品国产无码在线观看| 欧美日本韩国一区二区三区视频| 欧美男男video| 欧美系列一区| 国产乱码精品一区二区三区五月婷 | 免费一区二区| 超碰91在线播放| 一本大道久久a久久精品综合| 免费黄网站在线| 美女三级99| 国产精品一区一区| 无码人妻精品一区二区三区不卡 | 男人在线观看视频| 亚洲激情自拍图| 欧美成人毛片| 欧美精品99久久| 亚洲欧洲av另类| 精品乱码一区二区三四区视频| av噜噜色噜噜久久| 蜜臀av一区二区在线免费观看| 久久精品视频国产| 日韩性生活视频|