久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

Java 自定義線程池和線程總數控制操作

瀏覽:119日期:2022-08-16 09:13:03
1 概述

池化是常見的思想,線程池是非常典型的池化的實現,《Java并發編程實戰》也大篇幅去講解了Java中的線程池。本文實現一個簡單的線程池。

2 核心類【1】接口定義

public interface IThreadPool<Job extends Runnable> { /** * 關閉線程池 */ public void shutAlldown(); /** * 執行任務 * * @param job 任務 */ public void execute(Job job); /** * 添加工作者 * * @param addNum 添加數 */ public void addWorkers(int addNum); /** * 減少工作者 * * @param reduceNum 減少數目 */ public void reduceWorkers(int reduceNum);}【2】實現類

線程池的核心是維護了1個任務列表和1個工作者列表。

import java.util.ArrayList;import java.util.Collections;import java.util.LinkedList;import java.util.List; public class XYThreadPool<Job extends Runnable> implements IThreadPool<Job> { // 默認線程數 private static int DEAFAULT_SIZE = 5; // 最大線程數 private static int MAX_SIZE = 10; // 任務列表 private LinkedList<Job> tasks = new LinkedList<Job>(); // 工作線程列表 private List<Worker> workers = Collections .synchronizedList(new ArrayList<Worker>()); /** * 默認構造函數 */ public XYThreadPool() { initWokers(DEAFAULT_SIZE); } /** * 執行線程數 * * @param threadNums 線程數 */ public XYThreadPool(int workerNum) { workerNum = workerNum <= 0 ? DEAFAULT_SIZE : workerNum > MAX_SIZE ? MAX_SIZE : workerNum; initWokers(workerNum); } /** * 初始化線程池 * * @param threadNums 線程數 */ public void initWokers(int threadNums) { for (int i = 0; i < threadNums; i++) { Worker worker = new Worker(); worker.start(); workers.add(worker); } // 添加關閉鉤子 Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { shutAlldown(); } }); } @Override public void shutAlldown() { for (Worker worker : workers) { worker.shutdown(); } } @Override public void execute(Job job) { synchronized (tasks) { // 提交任務就是將任務對象加入任務隊列,等待工作線程去處理 tasks.addLast(job); tasks.notifyAll(); } } @Override public void addWorkers(int addNum) { // 新線程數必須大于零,并且線程總數不能大于最大線程數 if ((workers.size() + addNum) <= MAX_SIZE && addNum > 0) { initWokers(addNum); } else { System.out.println('addNum too large'); } } @Override public void reduceWorkers(int reduceNum) { if ((workers.size() - reduceNum <= 0)) System.out.println('thread num too small'); else { // 暫停指定數量的工作者 int count = 0; while (count != reduceNum) { for (Worker w : workers) { w.shutdown(); count++; } } } } /** * 工作線程 */ class Worker extends Thread { private volatile boolean flag = true; @Override public void run() { while (flag) { Job job = null; // 加鎖(若只有一個woker可不必加鎖,那就是所謂的單線程的線程池,線程安全) synchronized (tasks) { // 任務隊列為空 while (tasks.isEmpty()) { try { // 阻塞,放棄對象鎖,等待被notify喚醒 tasks.wait(); System.out.println('block when tasks is empty'); } catch (InterruptedException e) { e.printStackTrace(); } } // 不為空取出任務 job = tasks.removeFirst(); System.out.println('get job:' + job + ',do biz'); job.run(); } } } public void shutdown() { flag = false; } }}

(1) 當調用wait()方法時線程會放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象調用notify()方法后本線程才進入對象鎖定池準備

(2) Object的方法:void notify(): 喚醒一個正在等待該對象的線程。void notifyAll(): 喚醒所有正在等待該對象的線程。

notifyAll使所有原來在該對象上等待被notify的線程統統退出wait狀態,變成等待該對象上的鎖,一旦該對象被解鎖,它們會去競爭。

notify只是選擇一個wait狀態線程進行通知,并使它獲得該對象上的鎖,但不驚動其它同樣在等待被該對象notify的線程們,當第一個線程運行完畢以后釋放對象上的鎖,此時如果該對象沒有再次使用notify語句,即便該對象已經空閑,其他wait狀態等待的線程由于沒有得到該對象的通知,繼續處在wait狀態,直到這個對象發出一個notify或notifyAll,它們等待的是被notify或notifyAll,而不是鎖。

3 無需控制線程總數

每調用一次就會創建一個擁有10個線程工作者的線程池。

public class TestService1 { public static void main(String[] args) { // 啟動10個線程 XYThreadPool<Runnable> pool = new XYThreadPool<Runnable>(10); pool.execute(new Runnable() { @Override public void run() { System.out.println('====1 test===='); } }); }} public class TestService2 { public static void main(String[] args) { // 啟動10個線程 XYThreadPool<Runnable> pool = new XYThreadPool<Runnable>(10); pool.execute(new Runnable() { @Override public void run() { System.out.println('====2 test===='); } }); }}4 控制線程總數

在項目中所有的線程調用,一般都共用1個固定工作者數大小的線程池。

import javax.annotation.PostConstruct;import org.springframework.stereotype.Component;import com.xy.pool.XYThreadPool; /** * 統一線程池管理類 */@Componentpublic class XYThreadManager { private XYThreadPool<Runnable> executorPool; @PostConstruct public void init() { executorPool = new XYThreadPool<Runnable>(10); } public XYThreadPool<Runnable> getExecutorPool() { return executorPool; }} import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service; @Service('testService3')public class TestService3 { @Autowired private XYThreadManager threadManager; public void test() { threadManager.getExecutorPool().execute(new Runnable() { @Override public void run() { System.out.println('====3 test===='); } }); }} import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service; @Service('testService4')public class TestService4 { @Autowired private XYThreadManager threadManager; public void test() { threadManager.getExecutorPool().execute(new Runnable() { @Override public void run() { System.out.println('====4 test===='); } }); }} import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestMain { @SuppressWarnings('resource') public static void main(String[] args) { ApplicationContext atc = new ClassPathXmlApplicationContext('applicationContext.xml'); TestService3 t3 = (TestService3) atc.getBean('testService3'); t3.test(); TestService4 t4 = (TestService4) atc.getBean('testService4'); t4.test(); } }

補充:論如何優雅的自定義ThreadPoolExecutor線程池

前言

線程池想必大家也都用過,JDK的Executors 也自帶一些線程池。但是不知道大家有沒有想過,如何才是最優雅的方式去使用過線程池嗎? 生產環境要怎么去配置自己的線程池才是合理的呢?

今天周末,剛好有時間來總結一下自己所認為的’優雅’, 如有問題歡迎大家指正。

線程池使用規則

要使用好線程池,那么一定要遵循幾個規則:

線程個數大小的設置

線程池相關參數配置

利用Hook嵌入你的行為

線程池的關閉

線程池配置相關

線程池大小的設置

這其實是一個面試的考點,很多面試官會問你線程池coreSize 的大小來考察你對于線程池的理解。

首先針對于這個問題,我們必須要明確我們的需求是計算密集型還是IO密集型,只有了解了這一點,我們才能更好的去設置線程池的數量進行限制。

1、計算密集型:

顧名思義就是應用需要非常多的CPU計算資源,在多核CPU時代,我們要讓每一個CPU核心都參與計算,將CPU的性能充分利用起來,這樣才算是沒有浪費服務器配置,如果在非常好的服務器配置上還運行著單線程程序那將是多么重大的浪費。對于計算密集型的應用,完全是靠CPU的核數來工作,所以為了讓它的優勢完全發揮出來,避免過多的線程上下文切換,比較理想方案是:

線程數 = CPU核數+1,也可以設置成CPU核數*2,但還要看JDK的版本以及CPU配置(服務器的CPU有超線程)。

一般設置CPU * 2即可。

2、IO密集型

我們現在做的開發大部分都是WEB應用,涉及到大量的網絡傳輸,不僅如此,與數據庫,與緩存間的交互也涉及到IO,一旦發生IO,線程就會處于等待狀態,當IO結束,數據準備好后,線程才會繼續執行。因此從這里可以發現,對于IO密集型的應用,我們可以多設置一些線程池中線程的數量,這樣就能讓在等待IO的這段時間內,線程可以去做其它事,提高并發處理效率。那么這個線程池的數據量是不是可以隨便設置呢?當然不是的,請一定要記得,線程上下文切換是有代價的。目前總結了一套公式,對于IO密集型應用:

線程數 = CPU核心數/(1-阻塞系數) 這個阻塞系數一般為0.8~0.9之間,也可以取0.8或者0.9。

套用公式,對于雙核CPU來說,它比較理想的線程數就是20,當然這都不是絕對的,需要根據實際情況以及實際業務來調整:final int poolSize = (int)(cpuCore/(1-0.9))

針對于阻塞系數,《Programming Concurrency on the JVM Mastering》即《Java 虛擬機并發編程》中有提到一句話:

對于阻塞系數,我們可以先試著猜測,抑或采用一些細嫩分析工具或java.lang.management API 來確定線程花在系統/IO操作上的時間與CPU密集任務所耗的時間比值。

線程池相關參數配置

說到這一點,我們只需要謹記一點,一定不要選擇沒有上限限制的配置項。

這也是為什么不建議使用Executors 中創建線程的方法。

比如,Executors.newCachedThreadPool的設置與無界隊列的設置因為某些不可預期的情況,線程池會出現系統異常,導致線程暴增的情況或者任務隊列不斷膨脹,內存耗盡導致系統崩潰和異常。 我們推薦使用自定義線程池來避免該問題,這也是在使用線程池規范的首要原則! 小心無大錯,千萬別過度自信!

可以看下Executors中四個創建線程池的方法:

//使用無界隊列public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); } //線程池數量是無限的public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>()); }

其他的就不再列舉了,大家可以自行查閱源碼。

第二,合理設置線程數量、和線程空閑回收時間,根據具體的任務執行周期和時間去設定,避免頻繁的回收和創建,雖然我們使用線程池的目的是為了提升系統性能和吞吐量,但是也要考慮下系統的穩定性,不然出現不可預期問題會很麻煩!

第三,根據實際場景,選擇適用于自己的拒絕策略。進行補償,不要亂用JDK支持的自動補償機制!盡量采用自定義的拒絕策略去進行兜底!

第四,線程池拒絕策略,自定義拒絕策略可以實現RejectedExecutionHandler接口。

JDK自帶的拒絕策略如下:

AbortPolicy:直接拋出異常阻止系統正常工作。

CallerRunsPolicy:只要線程池未關閉,該策略直接在調用者線程中,運行當前被丟棄的任務。

DiscardOldestPolicy:丟棄最老的一個請求,嘗試再次提交當前任務。

DiscardPolicy:丟棄無法處理的任務,不給予任何處理。

利用Hook

利用Hook,留下線程池執行軌跡:

ThreadPoolExecutor提供了protected類型可以被覆蓋的鉤子方法,允許用戶在任務執行之前會執行之后做一些事情。我們可以通過它來實現比如初始化ThreadLocal、收集統計信息、如記錄日志等操作。這類Hook如beforeExecute和afterExecute。另外還有一個Hook可以用來在任務被執行完的時候讓用戶插入邏輯,如rerminated 。

如果hook方法執行失敗,則內部的工作線程的執行將會失敗或被中斷。

我們可以使用beforeExecute和afterExecute來記錄線程之前前和后的一些運行情況,也可以直接把運行完成后的狀態記錄到ELK等日志系統。

關閉線程池

內容當線程池不在被引用并且工作線程數為0的時候,線程池將被終止。我們也可以調用shutdown來手動終止線程池。如果我們忘記調用shutdown,為了讓線程資源被釋放,我們還可以使用keepAliveTime和allowCoreThreadTimeOut來達到目的!

當然,穩妥的方式是使用虛擬機Runtime.getRuntime().addShutdownHook方法,手工去調用線程池的關閉方法!

線程池使用實例

線程池核心代碼:

public class AsyncProcessQueue { // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /** * Task 包裝類<br> * 此類型的意義是記錄可能會被 Executor 吃掉的異常<br> */ public static class TaskWrapper implements Runnable { private static final Logger _LOGGER = LoggerFactory.getLogger(TaskWrapper.class); private final Runnable gift; public TaskWrapper(final Runnable target) { this.gift = target; } @Override public void run() { // 捕獲異常,避免在 Executor 里面被吞掉了 if (gift != null) { try { gift.run(); } catch (Exception e) { _LOGGER.error('Wrapped target execute exception.', e); } } } } // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /** * 執行指定的任務 * * @param task * @return */ public static boolean execute(final Runnable task) { return AsyncProcessor.executeTask(new TaskWrapper(task)); }}public class AsyncProcessor { static final Logger LOGGER = LoggerFactory.getLogger(AsyncProcessor.class); /** * 默認最大并發數<br> */ private static final int DEFAULT_MAX_CONCURRENT = Runtime.getRuntime().availableProcessors() * 2; /** * 線程池名稱格式 */ private static final String THREAD_POOL_NAME = 'ExternalConvertProcessPool-%d'; /** * 線程工廠名稱 */ private static final ThreadFactory FACTORY = new BasicThreadFactory.Builder().namingPattern(THREAD_POOL_NAME) .daemon(true).build(); /** * 默認隊列大小 */ private static final int DEFAULT_SIZE = 500; /** * 默認線程存活時間 */ private static final long DEFAULT_KEEP_ALIVE = 60L; /**NewEntryServiceImpl.java:689 * Executor */ private static ExecutorService executor; /** * 執行隊列 */ private static BlockingQueue<Runnable> executeQueue = new ArrayBlockingQueue<>(DEFAULT_SIZE); static { // 創建 Executor // 此處默認最大值改為處理器數量的 4 倍 try { executor = new ThreadPoolExecutor(DEFAULT_MAX_CONCURRENT, DEFAULT_MAX_CONCURRENT * 4, DEFAULT_KEEP_ALIVE, TimeUnit.SECONDS, executeQueue, FACTORY); // 關閉事件的掛鉤 Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { @Override public void run() { AsyncProcessor.LOGGER.info('AsyncProcessor shutting down.'); executor.shutdown(); try { // 等待1秒執行關閉 if (!executor.awaitTermination(1, TimeUnit.SECONDS)) { AsyncProcessor.LOGGER.error('AsyncProcessor shutdown immediately due to wait timeout.'); executor.shutdownNow(); } } catch (InterruptedException e) { AsyncProcessor.LOGGER.error('AsyncProcessor shutdown interrupted.'); executor.shutdownNow(); } AsyncProcessor.LOGGER.info('AsyncProcessor shutdown complete.'); } })); } catch (Exception e) { LOGGER.error('AsyncProcessor init error.', e); throw new ExceptionInInitializerError(e); } } /** * 此類型無法實例化 */ private AsyncProcessor() { } /** * 執行任務,不管是否成功<br> * 其實也就是包裝以后的 {@link Executer} 方法 * * @param task * @return */ public static boolean executeTask(Runnable task) { try { executor.execute(task); } catch (RejectedExecutionException e) { LOGGER.error('Task executing was rejected.', e); return false; } return true; } /** * 提交任務,并可以在稍后獲取其執行情況<br> * 當提交失敗時,會拋出 {@link } * * @param task * @return */ public static <T> Future<T> submitTask(Callable<T> task) { try { return executor.submit(task); } catch (RejectedExecutionException e) { LOGGER.error('Task executing was rejected.', e); throw new UnsupportedOperationException('Unable to submit the task, rejected.', e); } }}

使用方式:

AsyncProcessQueue.execute(new Runnable() { @Override public void run() {//do something }});

可以根據自己的使用場景靈活變更,我這里并沒有用到beforeExecute和afterExecute以及拒絕策略。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Java
相關文章:
主站蜘蛛池模板: 成人欧美一区二区三区 | 色婷婷久久久久swag精品 | 欧美日韩激情 | 国产精品久久久久一区二区三区 | 99免费精品| 精品亚洲一区二区三区 | 情侣av | 国产一区二区在线播放 | 国产精品久久久久久吹潮 | 91精品视频在线播放 | 久久久久久久一区 | 伊人操操| 欧美日韩精品一区二区三区 | 久草精品在线观看 | 国产精品久久国产精品 | 久久一区二区三区四区五区 | 免费国产一区 | 奇米色欧美一区二区三区 | 免费的色网站 | 亚洲午夜视频在线观看 | 国产精品久久免费视频在线 | 欧美日韩在线免费观看 | 天天综合网7799精品 | 国产视频中文字幕 | 精品久久一区二区三区 | 在线视频91 | 黄色a三级| 国产精品成人av | 国产69精品99久久久久久宅男 | 精品亚洲一区二区三区 | 亚洲午夜精品在线观看 | 亚洲成人av在线播放 | 三级黄色片在线观看 | 午夜不卡视频 | 天堂免费在线 | 久久久一| 久久精品欧美一区二区三区不卡 | 狠狠色狠狠色合久久伊人 | 91丁香婷婷综合久久欧美 | 99看片| 成人国产精品久久 | 四虎永久免费在线 | 麻豆精品久久 | 久久机热 | 99re6热只有精品免费观看 | 一区二区中文字幕 | 一区二区久久久 | 黄色一级免费电影 | 国产精品一区二区不卡 | 久久午夜综合久久 | 在线日韩视频 | 黄瓜av| 日韩精品中文字幕在线观看 | 国产在线播放av | 中文字幕 国产 | 久久99一区二区 | 国产欧美日韩一区 | 国产精品久久久久久福利一牛影视 | 久久国产成人 | 在线中文av | 久久九九精品久久 | 在线视频自拍 | 成人三级网址 | www伊人| 国产免费av网站 | 国产精品视频久久 | 91精品免费 | www.99热这里只有精品 | 欧美久久成人 | 亚洲一区二区在线 | 国产午夜精品一区二区三区嫩草 | 玖玖操 | 毛片a片 | 国产免费一区 | 欧美亚洲日本 | 日韩中文在线 | 国产精品久久久爽爽爽麻豆色哟哟 | 亚洲综合天堂网 | 香港三级日本三级a视频 | 精品国产一区二区三区性色 | 久久久久久99 | 精品国产乱码久久久久久88av | 高清成人 | 97国产精品视频 | 涩涩999| 国产精品久久久久久久久久久久久久 | 免费国产视频 | 成人在线亚洲 | 亚洲福利精品视频 | 欧美在线视频不卡 | 久久久网站| 亚洲精品一区二区网址 | 黄网站免费在线观看 | 五月网婷婷 | 日韩大片一区 | 成人精品电影 | 精品国产精品三级精品av网址 | 91无吗 | 羞羞的视频在线 | 国产精品99视频 | 日韩视频国产 | 国产福利在线播放 | 国产一区日韩欧美 | 日韩在线观看中文字幕 | 免费日本视频 | 色偷偷888欧美精品久久久 | 国产一区二区av | 久久久久久一区二区 | 精品成人免费一区二区在线播放 | 国产精品美女久久久久久久久久久 | www.欧美精品 | 亚洲成人中文字幕 | 日韩av在线中文字幕 | 久久久久国产一区二区三区 | 精品三级在线观看 | 国产成人在线播放 | 成人久久久 | 精品欧美一区二区在线观看视频 | 91一区二区 | 蜜桃免费视频 | 亚洲国产精品久久 | 亚洲欧洲精品视频 | 国产福利视频 | 亚洲精品成人网 | 狠狠干干| 欧美精品久 | 亚洲免费成人 | 成人激情视频免费观看 | 国产高清一区 | 一级在线观看 | 91精品国产91久久久久久 | 日韩二区三区 | 麻豆国产一区二区三区四区 | 中文二区 | 欧美成人精品在线观看 | 黑人巨大精品欧美一区免费视频 | 草草网| 能免费看的av | 国产欧美精品一区二区三区 | 日本高清h色视频在线观看 日日干日日操 | 国产做a爱片久久毛片 | 欧美日本一区二区三区 | 综合久久久久久久 | 久久久噜噜噜www成人网 | 国产精品高潮呻吟久久av黑人 | 欧美精品一区二区视频 | 国产精品久久久久久吹潮 | 欧美日韩国产一区二区三区在线观看 | 国产一区二 | 在线天堂av| 欧美日韩在线精品 | 国产中文字幕在线观看 | 一二三区字幕免费观看av | 天天爽夜夜春 | 精久久久| 精品人成 | 亚洲一区二区三区四区五区中文 | 亚洲综合欧美日韩 | 毛片综合| 欧美视频网站 | 国产免费久久 | 在线视频一区二区 | 欧美久热 | 成人免费一区二区三区视频网站 | 国产乱码精品一区二区三区av | 亚洲视频免费观看 | 亚洲欧美综合一区 | 自拍偷拍视频网站 | 一级片在线观看 | 日本在线观看 | 国产精品久久久久久久久免费桃花 | 免费毛片网站 | 亚洲精品电影网在线观看 | 99国产精品久久久 | 性高湖久久久久久久久aaaaa | 久草热线视频 | 国产高清一级 | 色吟av| 久久高清 | 一区二区三区四区免费看 | 成人av综合 | 欧美日韩中文字幕在线 | 日韩城人网站 | 欧美三级视频在线播放 | 亚洲黄色免费观看 | 天天操天天插天天干 | 精品久久网站 | 天天干女人网 | 亚洲精品自拍视频 | 日韩精品一区二区三区在线 | jizz中国日本 | 亚洲v日韩v综合v精品v | 欧美一级黄色片网站 | 亚洲欧美一区二区三区在线 | 国产成人午夜 | 六月丁香在线观看 | 国产精品久久久久久久粉嫩 | 亚洲视频在线播放 | 精品无码久久久久久国产 | 午夜免费福利影院 | 日韩欧美国产网站 | 亚洲精品一区中文字幕乱码 | 欧美一区二区三区 | 久久国产精品一区二区 | 国产日韩精品视频 | 精品99久久 | 国产成人aⅴ | 成人在线免费 | 国产精品一区二区三区在线播放 | 亚洲综合视频在线 | 午夜精品网站 | 亚洲免费在线 | 日韩欧美在线综合 | 日本手机在线视频 | 美女久久 | 少妇淫片aaaaa毛片叫床爽 | 精品无码久久久久国产 | 伊人影视 | 国产女人和拘做受在线视频 | 久久久久中文字幕 | 另类五月天| 日韩中字幕 | 国产精品99久久久久久www | 欧美日韩高清在线一区 | 波多野结衣一区二区三区四区 | 日韩毛片 | 国产成人精品一区二区三区视频 | a黄视频 | 国产在线一级视频 | 成人免费一区二区三区视频网站 | 久久久com| 狠狠爱综合 | 一区二区三区有限公司 | 国产日韩欧美 | 国产精品久久一区 | 久久爱9191 | 日本一区二区电影 | 羞羞午夜 | bxbx成人精品一区二区三区 | 蜜月va乱码一区二区三区 | av影片在线| 日韩精品一区二区三区在线观看 | 免费在线成人 | 97热在线观看 | 337p日本粉嫩噜噜噜 | 91 在线| 日韩第1页| 亚洲精品中文字幕乱码无线 | 91高清视频在线观看 | 中文在线一区二区 | 中文字幕在线三区 | 免费成人一级片 | 男女视频在线观看 | 国产日韩精品一区二区 | 中文字幕在线三区 | 久久这里只有精品首页 | 久久不卡日韩美女 | 国产一区二区三区免费看 | 精品久久久久久久 | 最新国产在线视频 | 在线观看视频一区 | 激情视频在线观看免费 | 国产精品三级久久久久久电影 | chinese中国真实乱对白 | 国产乱码精品一区二区三区中文 | 中文字幕69av | 日韩一二区视频 | 久久精品国产一区二区三区不卡 | 一区二区欧美视频 | 精品在线播放 | 欧美成人一区二区三区片免费 | 黑人巨大精品欧美一区二区小视频 | 国产美女www爽爽爽免费视频 | 国产一区二区三区网站 | 玖玖操 | 亚洲精品视频在线观看免费 | 日操视频| 一区二区精品视频 | 国产黄色在线免费看 | 在线一区观看 | 午夜欧美一区二区三区在线播放 | 亚洲精品一区二区三区 | 国产一区二区在线看 | 蜜桃在线视频 | 一区二区国产精品 | 99久久婷婷国产综合精品 | 国产精品久久久久久一区二区三区 | 国产精品毛片无码 | 亚洲中午字幕 | 一区二区手机在线 | 国产精品久久久久久久久福交 | 日本午夜在线 | 一区二区三区自拍 | 人人草人人 | 欧美一级特黄aaaaaaa视频片 | 在线中文字幕第一页 | 久久久久亚洲一区二区三区 | aⅴ色国产 欧美 | 亚洲欧洲精品一区二区 | 日本私人网站在线观看 | 毛片av在线播放 | 亚洲综合在线网 | 1000部羞羞视频在线看视频 | 国产精品久久久久久一级毛片 | 中文字幕在线观看的电影 | 一级片av| 久久久国产一区二区 | 我和我的祖国电影在线观看免费版高清 | 成人午夜sm精品久久久久久久 | 一级免费毛片 | 久久久久久麻豆 | 亚洲成人久久久 | 国产精品久久久久久久久久久不卡 | 高清av网站 | 久热免费在线观看 | 色视频网站在线观看一=区 日韩一二三区 | 久久成人高清 | 极品av | 欧美一区二区三区在线看 | 国产aⅴ | 黄久久久 | 女人爽到高潮aaaa电影 | 亚洲午夜精品一区二区三区他趣 | 一区二区三区欧美在线 | 日韩一区在线视频 | 亚洲精品日韩在线 | 日韩国产精品视频 | 日本久久精品 | 色伊人久久 | 欧美香蕉 | 国家aaa的一级看片 操操操夜夜操 | 色婷婷综合在线 | 日本黄色毛片 | 91综合视频在线观看 | 日韩美女av在线 | 欧美精品被| 一区二区三区四区在线 | 久草美女 | 欧美在线综合 | 狠狠夜夜| 欧美黑人一区 | 999精品视频 | 热re99久久精品国99热线看 | 国产乱视频 | 色综合欧美 | 国产在线视频网站 | 91精品一区二区三区久久久久久 | 女同久久 | 一区二区三区在线 | 久久久久久久国产精品视频 | 99看| 91夜夜操 | www国产免费 | 国产精品毛片久久久久久久 | 国产福利视频 | 欧美成人综合在线 | 久久窝| 日韩在线精品 | 久久精品久久久久电影 | 免费黄在线观看 | 日韩在线视频资源 | 精品久久中文字幕 | 成年人在线观看 | 欧美日韩一二三区 | 国产精品毛片久久久久久久 | 欧美一区日韩一区 | 高清av一区 | 亚洲一区在线观看视频 | 国产精品国产三级国产aⅴ原创 | 欧美成人一区二区三区片免费 | 日日操视频 | 色婷婷基地 | 人人射av | 国产日韩在线播放 | 99视频在线| 操到爽 | 亚洲国产成人精品女人 | 日韩1区 | 午夜黄色影院 | av在线一区二区 | 欧美韩一区二区 | 欧美片网站免费 | 欧美一级精品片在线看 | 国产精品久久久久久久电影 | 日韩成人在线一区 | 欧美激情自拍偷拍 | www狠狠干| 欧美性18 | 日韩免费| 一区二区三区中文字幕 | av在线一区二区三区 | 日本一区二区三区四区视频 | 久久亚 | 欧美福利电影在线观看 | 天天夜碰日日摸日日澡 | 视频在线一区二区 | 国产一区二区三区在线免费 | 久久久久久久久久久久久久av | 国产成人涩涩涩视频在线观看 | 国产四区| 伊人激情av一区二区三区 | 另类天堂av | 亚洲三区在线观看 | 亚洲精品在线免费 | 日韩精品一区二区在线观看 | 国产亚洲欧美在线 | 91精品久久久久久久久久小网站 | 综合激情久久 | 国产精品人人做人人爽 | 在线日韩欧美 | 欧美日韩黄色一区二区 | 不卡在线| 干中文字幕 | 欧美日产国产成人免费图片 | 伊人久久精品久久亚洲一区 | 欧美亚洲国产一区 | 色综久久 | 91精品中文字幕一区二区三区 | 欧美亚洲视频在线观看 | 中文字幕视频在线 | 国产成人一区 | 精品毛片 | 亚洲国产精品第一区二区 | 亚洲精品久久久久久久久久久 | 亚洲男人天堂av | 亚洲成人中文字幕 | 天天操,夜夜操 | 狠狠操网站 | 欧美成人免费网站 | 欧美日韩一区二区三区免费视频 | 欧美精品一区二区三区在线 | 成人激情视频在线播放 | 日韩在线欧美 | 高清国产视频 | 欧美性大战久久久久久久蜜臀 | 精品免费视频 | 91在线视频在线 | 日韩伦理一区二区 | www.五月天婷婷 | 一级黄色短片 | 亚洲欧美一级久久精品 | 国产欧美精品一区二区色综合 | 久久精品亚洲精品国产欧美 | 国产免费看| 国产精品久久久久久久久久久免费看 | 亚洲电影一区二区三区 | 国内精品一区二区 | 成人免费淫片aa视频免费 | 久久久久久综合 | 国产精品成人一区二区三区夜夜夜 | 在线观看免费视频91 | 色婷婷久久一区二区三区麻豆 | 精品999www | 色婷婷一区二区三区 | 91玖玖| 人人看人人射 | 国产成人免费视频网站视频社区 | 欧美一区 | 91免费看电影 | 黄色片一区 | 黄色在线观看 | 午夜电影 | 精品美女久久久 | 欧美一级精品片在线看 | 成人h动漫免费观看网站 | 国产精品久久久久久久久久久久 | 国产成人影院在线观看 | 国产成人自拍一区 | 日韩av免费在线观看 | 91久久久久久久久久久久久 | 国产精品乱码一区二区三区 | 91麻豆精品国产91久久久更新资源速度超快 | 超碰九七在线 | 99伊人| 日本黄色一级片视频 | 91丝袜 | 国产精品久久久久久久久福交 | 国产精品色在线网站 | 五月婷婷导航 | 日韩亚洲 | 国产乱码精品1区2区3区 | 亚洲一区二区中文字幕 | 国产欧美精品一区二区色综合 | 精品国产成人 | 欧美一区二区三区爽大粗免费 | 成人av综合 | 午夜av电影 | 日日爱影视| 亚洲 激情 在线 | 国产一区二区三区免费观看 | 一级片在线观看 | 国产精品成人在线 | 精品一区二区三区免费 | 一区二区三区国产好 | 精品国产一区二区三区久久久蜜臀 | 国产精品成人一区二区三区夜夜夜 | 午夜男人免费视频 | 久久久www成人免费精品 | 亚洲欧美日韩在线一区二区三区 | 久久一区国产 | 亚洲 中文 欧美 日韩在线观看 | 日日操视频 | 国产高清视频在线 | 国产免费高清 | 五月天狠狠爱 | 欧美精品一区二区三区四区五区 | 亚洲精品视频在线 | 国产18av| 成人久久| 欧美日韩一区二区三区不卡视频 | 一区二区三区亚洲视频 | 日韩一二三区在线观看 | 成人不卡视频 | 亚洲成人免费在线 | 在线观看国产精品一区二区 | 国产精品久久久久影院色老大 | 激情91| 欧美日韩综合视频 | 亚洲成人免费视频在线观看 | 激情欧美日韩一区二区 | 成人精品网站在线观看 | 欧美天堂在线观看 | 欧美日韩综合精品 | 在线观看免费av网 | 成人免费av| 亚洲视频中文字幕 | 综合一区二区三区 | 久久久久久久91 | 久久精品91 | 黄av在线 | 亚洲三区在线观看 | 综合 欧美 亚洲日本 | 国产精品日韩一区二区 | 午夜视频 | 91福利在线导航 | 午夜在线一区 | 久久aⅴ国产欧美74aaa | 日韩免费视频 | 亚洲 欧美 日韩在线 | 亚洲每日更新 | 黄色官网在线观看 | 亚洲高清免费视频 | 一级在线毛片 | 欧美一级淫片免费视频黄 | 欧美一区2区三区4区公司二百 | 日韩欧美在线看 | 精品三区在线观看 | 伊人网网站| 精品国产一区二区三区在线观看 | 一级全毛片 | 91视频.com | 91精品国产综合久久久蜜臀图片 | 成人午夜影院 | 色综合99 | 亚洲一区二区精品视频 | 超碰最新在线 | 欧美国产精品一区 | 亚洲狠狠爱一区二区三区 | 精品久久久久久久久久久久久久久 | 欧美激情精品久久久久久 | 久久综合色88 | 美女h在线观看 | 日本不卡高字幕在线2019 | 在线观看免费av网 | 亚洲欧美在线观看 | 日日综合 | 秋霞电影院午夜伦 | 亚洲精品乱码久久久久久按摩观 | 97超碰在线播放 | 一级免费黄视频 | 久久久久av | 国产欧美日韩综合精品一区二区 | 亚洲精品在线观看免费 | www.日韩| 正在播放欧美 | 欧美在线观看一区 | 亚洲精品成人av | av影音资源 | 久久久久久久国产 | 成人一区二区av | 国产欧美一二三区在线粉嫩 | 久久亚洲国产视频 | 最新中文字幕在线 | 欧美精品成人一区二区在线 | 亚洲精品久久久久久久久久久 | 三级av网站 | 成人在线视频免费 | 亚洲91| 天天网| 成年人网站国产 | 国产精品美女在线观看 | 亚洲一区在线视频 | 欧美国产在线观看 | 精品一区二区在线观看 | 亚洲一区二区三区免费视频 | 最新午夜综合福利视频 | 午夜精品影院 | 亚洲福利一区 | 午夜视频在线观看网站 | 黄色一级大片在线免费看产 | 在线观看av网站永久 | 国产一区二区三区在线视频 | 亚洲视频在线免费观看 | 97在线视频免费 | 亚洲国产精品一区二区久久,亚洲午夜 | 国产成人综合网 | 国产精品国产精品国产专区不片 | 青草成人免费视频 | 自拍偷拍第一页 | 久久久久久国产视频 | 毛片在线免费 | 欧美在线观看视频 | 国产福利一区二区三区四区 | 免费黄看片 | 神马午夜|