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

视频二区欧美毛片免费观看| 国产婷婷色一区二区在线观看 | 国产欧美一区| 欧美天堂一区二区三区| 欧美日韩一区二区电影| av免费精品一区二区三区| 国产一级淫片a| av一区二区在线观看| 欧美一区日韩一区| 国产精品沙发午睡系列| 国产精品xxxx| 亚洲国产女人aaa毛片在线| 欧美在线视频一区二区三区| 中文字幕资源网| 欧美日韩亚洲在线| 91福利视频导航| 日韩av在线播| 香蕉国产精品| 国产丝袜一区视频在线观看| 国产精品久久久久久9999| 人狥杂交一区欧美二区| 成人免费电影网址| 欧美天堂在线观看| 免费看日本黄色| 99re热久久这里只有精品34| 成人av综合一区| 成人h视频在线| 久久久成人免费视频| 欧美三区视频| 国产 日韩 欧美大片| 中文字幕日韩欧美| 免费看黄色aaaaaa 片| 国产精品一区二区三区av | 波多野结衣激情| 蜜桃视频在线免费| 成人av资源站| 92裸体在线视频网站| 香蕉污视频在线观看| 亚洲激情午夜| 欧美精品成人在线| 91麻豆免费视频网站| 日韩专区精品| 中文字幕国产精品| 亚洲一区视频在线播放| 久久成人av| 亚洲精品中文字幕有码专区| 日本久久久久久久久久| 久久精品九色| 日韩无一区二区| 特级黄色片视频| 激情不卡一区二区三区视频在线| 精品视频全国免费看| 日韩精品电影在线观看| 一区二区三区四区视频精品免费| 亚洲精品久久久久久一区二区| 日本福利片高清在线观看| 成人avav在线| 国产免费一区| 香蕉视频黄在线观看| 成人一二三区视频| 嫩呦国产一区二区三区av| 国内精品国产成人| 国产免费成人av| 亚洲专区在线播放| 久久电影网站中文字幕| 国产精品自产拍在线观看中文| 免费在线不卡av| 日韩电影免费在线看| 电影中文字幕一区二区| 成人免费高清视频| 成人在线视频网址| 国产 日韩 欧美 精品| 高清国产午夜精品久久久久久| 成人高清在线观看| 头脑特工队2免费完整版在线观看| 成人国产在线观看| 蜜桃成人在线| 中国日本在线视频中文字幕| 亚洲欧洲www| 欧美激情亚洲天堂| 在线视频cao| 欧美日韩一级视频| 亚洲熟女一区二区三区| 亚洲人成精品久久久| 色一情一乱一区二区| 丰满少妇被猛烈进入一区二区| 日韩成人av一区二区| 成人av蜜桃| 美女福利视频网| 久久精品影视| 欧美国产日韩在线观看| 国产91亚洲精品一区二区三区| 日本免费不卡视频| 中文在线免费一区三区高中清不卡| 中文字幕黄色大片| sm捆绑调教国产免费网站在线观看| 色综合色综合色综合色综合色综合 | av网站在线观看免费| 成人av电影在线| 一区二区三视频| tube8在线hd| 欧美色视频在线观看| 人妻 丝袜美腿 中文字幕| 国产99久久| 久久久精品国产网站| 国产成人免费观看视频| 久久99精品国产麻豆婷婷| 国产高清精品一区| 在线免费看av| 岛国av在线不卡| 亚洲理论中文字幕| 欧美日韩一区二区综合| 91精品成人久久| 自拍偷拍色综合| 91一区二区在线| 50度灰在线观看| 成人性片免费| 日韩精品免费视频| 久久久久成人片免费观看蜜芽| 青草av.久久免费一区| 精品乱色一区二区中文字幕| 黄色大片在线播放| 欧美视频中文一区二区三区在线观看| 动漫美女无遮挡免费| 91精品一区国产高清在线gif| 国产91九色视频| 性xxxfllreexxx少妇| 亚洲国产欧美日韩另类综合| 日韩欧美中文视频| 97精品国产一区二区三区| 日本在线观看天堂男亚洲| 日韩有码第一页| 一区二区三区毛片| 992tv人人草| 国产精品久久久乱弄 | 成人亚洲精品| 日韩在线欧美在线| 在线观看国产小视频| 久久品道一品道久久精品| 少妇高潮毛片色欲ava片| 99re6热只有精品免费观看| 久久97久久97精品免视看| 国产又粗又猛又爽又黄的| 中文字幕一区二区三区色视频| 在线观看av网页| 日韩在线观看| 91色中文字幕| 最近中文字幕免费mv2018在线 | 神马午夜一区二区| 疯狂欧美牲乱大交777| 国产又粗又猛又色| 国产日韩欧美在线播放不卡| 国产嫩草一区二区三区在线观看| 91高清视频在线观看| 亚洲成年人影院在线| 日本一区二区三区免费视频| 99国产精品国产精品毛片| 日韩精品xxxx| 精品午夜久久| 91精品久久久久久久久| 韩国中文字幕在线| 欧美mv日韩mv国产网站app| 日本熟妇毛耸耸xxxxxx| 91在线视频观看| 国产a级片免费观看| 日韩av在线播放网址| 国产日产久久高清欧美一区| 国产原厂视频在线观看| 欧美本精品男人aⅴ天堂| 日韩三级免费看| 国产日韩三级在线| 久久精品国产露脸对白| 在线观看一区| 欧洲亚洲一区二区| 曰本一区二区| 欧美精品videos另类日本| 免费福利在线视频| 56国语精品自产拍在线观看| 久久久久免费看| 国产亚洲成av人在线观看导航| 欧美视频国产视频| 亚洲免费精品| 亚洲欧洲免费无码| 国产精品网址| 国产精品一区专区欧美日韩| 污视频网站在线免费| 亚洲欧美日韩国产成人| 国产精品丝袜黑色高跟鞋| 午夜精品国产更新| 特级西西人体高清大胆| 国产成人精品一区二| 日韩中文字幕免费在线| 欧美成人首页| 日韩在线电影一区| youjizz亚洲| 国产欧美日韩亚洲精品| 97人人爽人人澡人人精品| 日韩在线欧美在线国产在线| 天堂中文资源在线观看| 欧美精品一级二级| 无码人妻精品一区二区| 亚洲一级二级在线| 欧美一级特黄高清视频| 91麻豆国产在线观看| 毛片毛片毛片毛片毛| 日日噜噜夜夜狠狠视频欧美人| 成年人深夜视频| 99久久夜色精品国产亚洲狼 | 九色在线播放| 精品粉嫩超白一线天av| 一区二区三区午夜| 色婷婷亚洲精品| 免费一级特黄特色大片| 亚洲欧美色图小说| 女人十八毛片嫩草av| 91在线高清观看| 美女搡bbb又爽又猛又黄www| 久热成人在线视频| 午夜dv内射一区二区| 亚洲激情婷婷| 国产美女主播在线| 亚洲一区在线| 超碰在线免费观看97| 国内精品久久久久久久影视简单| 国产呦系列欧美呦日韩呦| 欧美日韩黄色| 亚洲精品欧美极品| 日韩色性视频| 国产精品午夜一区二区欲梦| 国产伦久视频在线观看| 国语对白做受69| 欧美人与性动交α欧美精品济南到| 色婷婷综合久久久久中文字幕1| 美女欧美视频在线观看免费 | 午夜精品一区二区在线观看的| 日韩美女精品| 狠狠色噜噜狠狠狠狠色吗综合| 中文字幕久久精品一区二区| 91在线视频导航| 北岛玲精品视频在线观看| 成人午夜小视频| 亚洲伦理久久| 成人情趣片在线观看免费| 青青久久精品| 亚洲精品日韩av| 精品视频在线一区| 91视频免费在线观看| 凹凸av导航大全精品| 成人欧美一区二区| 成人av动漫| 国产一区二区免费电影| 奇米777国产一区国产二区| 久久伊人一区| 国内精品久久久久久99蜜桃| 亚洲国内在线| 午夜精品一区二区三区国产| 黄色污污在线观看| 在线观看不卡| 日韩在线xxx| 美日韩一区二区| 亚洲熟女乱综合一区二区| 成人精品鲁一区一区二区| 懂色av粉嫩av蜜乳av| 国产无一区二区| 中文字幕美女视频| 一区二区三区蜜桃| 老熟妇仑乱一区二区av| 欧美日韩一二区| 超碰人人人人人人| 亚洲欧美日韩在线高清直播| 999在线视频| 久久999免费视频| 一区二区精品伦理... | 亚洲一区 二区| 精品婷婷色一区二区三区蜜桃| 国产成人调教视频在线观看 | 无码一区二区三区在线| 国产精品成人网| 日本少妇性生活| 欧美日韩精品系列| 人妻丰满熟妇av无码区hd| 亚洲人成电影在线观看天堂色| 免费a在线看| 55夜色66夜色国产精品视频| 精品久久99| 国产精品免费在线| 成人精品电影| 久久精品xxx| 免费观看日韩电影| 黄色录像a级片| 亚洲色图一区二区| 中文字幕av影院| 日韩欧美国产系列| 超碰在线影院| 2018中文字幕一区二区三区| 成人全视频免费观看在线看| 国产偷久久久精品专区| 激情五月综合| 99在线免费视频观看| 麻豆精品一区二区三区| 国产麻豆xxxvideo实拍| 亚洲三级在线免费| 亚洲高清视频免费观看| 亚洲国产成人精品久久| 欧美日韩在线资源| 日产日韩在线亚洲欧美| 成人线上播放| 成人短视频在线看| 日本视频一区二区| 99久久人妻精品免费二区| 亚洲美女在线国产| 在线观看亚洲一区二区| 亚洲欧美综合v| www.色在线| 粉嫩高清一区二区三区精品视频| 日韩极品一区| 手机在线看福利| 久久久无码精品亚洲日韩按摩| 久久久久久久福利| 欧美高清视频不卡网| 国产精品一区二区三区四区色| 国产做受高潮69| 亚洲一区 二区| 福利在线小视频| 激情五月激情综合网| gv天堂gv无码男同在线观看| 日韩欧美精品在线观看| 天堂中文在线官网| 91高清视频在线免费观看| www.爱久久| 国产乱子伦精品视频| 国产一区二区网址| 自拍偷拍第9页| 欧美日韩一区高清| 色噜噜噜噜噜噜| 国产一区二区免费在线| 日韩av片在线免费观看| 在线视频一区二区免费| 青青草超碰在线| 欧美在线性爱视频 | 成年人午夜视频| 欧美精品一区二区三| 黄页网站在线| 国产精品免费观看高清| 亚洲巨乳在线| 亚洲av成人片色在线观看高潮 | 2018中文字幕一区二区三区| 青青草这里只有精品| 日日橹狠狠爱欧美超碰| 99re热这里只有精品视频| 国产精品久久久久久久妇| 日韩精品一二三四区| 韩日精品一区| 亚洲一区高清| 国产毛片精品视频| 久久网免费视频| 日韩国产高清视频在线| 亚洲成人短视频| 亚洲日本精品一区| 国产酒店精品激情| 一区二区三区视频免费看| 亚洲免费精彩视频| 久久爱.com| 日韩一级特黄毛片| 91在线小视频| 中文字幕在线观看精品| 欧美成人黄色小视频| 精品国产影院| 亚洲高清在线免费观看| 日韩毛片在线免费观看| 国产18精品乱码免费看| 日产精品久久久一区二区福利| 99精品视频在线观看播放| 午夜性福利视频| 色天天综合色天天久久| 国产最新在线| 久久99精品久久久久久三级| 石原莉奈在线亚洲三区| 一级片一级片一级片| 亚洲成人免费网站| 8av国产精品爽爽ⅴa在线观看 | 美女福利视频网| 欧美精品一区二区三区蜜桃 | 美国av一区二区三区| 喷白浆一区二区| 国产亚洲精品久久久久久打不开| 亚洲另类激情图| 欧美日本三级| 国产一级做a爰片久久| 一区二区欧美精品| 成人在线观看网站| 国产精品国产三级欧美二区| 日韩精品国产欧美| 精品视频久久久久| 中文国产亚洲喷潮| 日本国产精品| 天天干天天曰天天操| 欧美专区亚洲专区| 97超碰免费在线| 一区二区三区四区免费观看|