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

Java線程池8大拒絕策略,面試必問(wèn)!

開(kāi)發(fā) 后端
JDK中已經(jīng)預(yù)設(shè)了4種線程池拒絕策略,下面結(jié)合場(chǎng)景詳細(xì)聊聊這些策略的使用場(chǎng)景,以及我們還能擴(kuò)展哪些拒絕策略。

 前言

談到j(luò)ava的線程池最熟悉的莫過(guò)于ExecutorService接口了,jdk1.5新增的java.util.concurrent包下的這個(gè)api,大大的簡(jiǎn)化了多線程代碼的開(kāi)發(fā)。而不論你用FixedThreadPool還是CachedThreadPool其背后實(shí)現(xiàn)都是ThreadPoolExecutor。

ThreadPoolExecutor是一個(gè)典型的緩存池化設(shè)計(jì)的產(chǎn)物,因?yàn)槌刈佑写笮。?dāng)池子體積不夠承載時(shí),就涉及到拒絕策略。JDK中已經(jīng)預(yù)設(shè)了4種線程池拒絕策略,下面結(jié)合場(chǎng)景詳細(xì)聊聊這些策略的使用場(chǎng)景,以及我們還能擴(kuò)展哪些拒絕策略。

池化設(shè)計(jì)思想

池話設(shè)計(jì)應(yīng)該不是一個(gè)新名詞。我們常見(jiàn)的如java線程池、jdbc連接池、redis連接池等就是這類(lèi)設(shè)計(jì)的代表實(shí)現(xiàn)。

這種設(shè)計(jì)會(huì)初始預(yù)設(shè)資源,解決的問(wèn)題就是抵消每次獲取資源的消耗,如創(chuàng)建線程的開(kāi)銷(xiāo),獲取遠(yuǎn)程連接的開(kāi)銷(xiāo)等。就好比你去食堂打飯,打飯的大媽會(huì)先把飯盛好幾份放那里,你來(lái)了就直接拿著飯盒加菜即可,不用再臨時(shí)又盛飯又打菜,效率就高了。

除了初始化資源,池化設(shè)計(jì)還包括如下這些特征:池子的初始值、池子的活躍值、池子的最大值等,這些特征可以直接映射到j(luò)ava線程池和數(shù)據(jù)庫(kù)連接池的成員屬性中。

線程池觸發(fā)拒絕策略的時(shí)機(jī)

和數(shù)據(jù)源連接池不一樣,線程池除了初始大小和池子最大值,還多了一個(gè)阻塞隊(duì)列來(lái)緩沖。

數(shù)據(jù)源連接池一般請(qǐng)求的連接數(shù)超過(guò)連接池的最大值的時(shí)候就會(huì)觸發(fā)拒絕策略,策略一般是阻塞等待設(shè)置的時(shí)間或者直接拋異常。

如圖,想要了解線程池什么時(shí)候觸發(fā)拒絕粗略,需要明確上面三個(gè)參數(shù)的具體含義,是這三個(gè)參數(shù)總體協(xié)調(diào)的結(jié)果,而不是簡(jiǎn)單的超過(guò)最大線程數(shù)就會(huì)觸發(fā)線程拒絕粗略,當(dāng)提交的任務(wù)數(shù)大于corePoolSize時(shí),會(huì)優(yōu)先放到隊(duì)列緩沖區(qū),只有填滿了緩沖區(qū)后,才會(huì)判斷當(dāng)前運(yùn)行的任務(wù)是否大于maxPoolSize,小于時(shí)會(huì)新建線程處理。大于時(shí)就觸發(fā)了拒絕策略。

總結(jié)就是:當(dāng)前提交任務(wù)數(shù)大于(maxPoolSize + queueCapacity)時(shí)就會(huì)觸發(fā)線程池的拒絕策略了。

JDK內(nèi)置4種線程池拒絕策略

拒絕策略接口定義

在分析JDK自帶的線程池拒絕策略前,先看下JDK定義的 拒絕策略接口,如下: 

  1. public interface RejectedExecutionHandler {  
  2.     void rejectedExecution(Runnable r, ThreadPoolExecutor executor);  

接口定義很明確,當(dāng)觸發(fā)拒絕策略時(shí),線程池會(huì)調(diào)用你設(shè)置的具體的策略,將當(dāng)前提交的任務(wù)以及線程池實(shí)例本身傳遞給你處理,具體作何處理,不同場(chǎng)景會(huì)有不同的考慮,下面看JDK為我們內(nèi)置了哪些實(shí)現(xiàn):

CallerRunsPolicy(調(diào)用者運(yùn)行策略) 

  1. public static class CallerRunsPolicy implements RejectedExecutionHandler {  
  2.         public CallerRunsPolicy() { }  
  3.         public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {  
  4.             if (!e.isShutdown()) {  
  5.                 r.run();  
  6.             }  
  7.         }  
  8.     } 

功能:當(dāng)觸發(fā)拒絕策略時(shí),只要線程池沒(méi)有關(guān)閉,就由提交任務(wù)的當(dāng)前線程處理。

使用場(chǎng)景:一般在不允許失敗的、對(duì)性能要求不高、并發(fā)量較小的場(chǎng)景下使用,因?yàn)榫€程池一般情況下不會(huì)關(guān)閉,也就是提交的任務(wù)一定會(huì)被運(yùn)行,但是由于是調(diào)用者線程自己執(zhí)行的,當(dāng)多次提交任務(wù)時(shí),就會(huì)阻塞后續(xù)任務(wù)執(zhí)行,性能和效率自然就慢了。

AbortPolicy(中止策略) 

  1. public static class AbortPolicy implements RejectedExecutionHandler {  
  2.         public AbortPolicy() { }  
  3.         public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {  
  4.             throw new RejectedExecutionException("Task " + r.toString() +  
  5.                                                  " rejected from " +  
  6.                                                  e.toString());  
  7.         }  
  8.     } 

功能:當(dāng)觸發(fā)拒絕策略時(shí),直接拋出拒絕執(zhí)行的異常,中止策略的意思也就是打斷當(dāng)前執(zhí)行流程

使用場(chǎng)景:這個(gè)就沒(méi)有特殊的場(chǎng)景了,但是一點(diǎn)要正確處理拋出的異常。

ThreadPoolExecutor中默認(rèn)的策略就是AbortPolicy,ExecutorService接口的系列ThreadPoolExecutor因?yàn)槎紱](méi)有顯示的設(shè)置拒絕策略,所以默認(rèn)的都是這個(gè)。 

但是請(qǐng)注意,ExecutorService中的線程池實(shí)例隊(duì)列都是無(wú)界的,也就是說(shuō)把內(nèi)存撐爆了都不會(huì)觸發(fā)拒絕策略。當(dāng)自己自定義線程池實(shí)例時(shí),使用這個(gè)策略一定要處理好觸發(fā)策略時(shí)拋的異常,因?yàn)樗麜?huì)打斷當(dāng)前的執(zhí)行流程。

DiscardPolicy(丟棄策略) 

  1. public static class DiscardPolicy implements RejectedExecutionHandler {  
  2.         public DiscardPolicy() { }  
  3.         public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {  
  4.         }  
  5.     } 

功能:直接靜悄悄的丟棄這個(gè)任務(wù),不觸發(fā)任何動(dòng)作

使用場(chǎng)景:如果你提交的任務(wù)無(wú)關(guān)緊要,你就可以使用它 。因?yàn)樗褪莻€(gè)空實(shí)現(xiàn),會(huì)悄無(wú)聲息的吞噬你的的任務(wù)。所以這個(gè)策略基本上不用了

DiscardOldestPolicy(棄老策略) 

  1. public static class DiscardOldestPolicy implements RejectedExecutionHandler {  
  2.         public DiscardOldestPolicy() { }  
  3.         public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {  
  4.             if (!e.isShutdown()) {  
  5.                 e.getQueue().poll();  
  6.                 e.execute(r);  
  7.             }  
  8.         }  
  9.     } 

功能:如果線程池未關(guān)閉,就彈出隊(duì)列頭部的元素,然后嘗試執(zhí)行

使用場(chǎng)景:這個(gè)策略還是會(huì)丟棄任務(wù),丟棄時(shí)也是毫無(wú)聲息,但是特點(diǎn)是丟棄的是老的未執(zhí)行的任務(wù),而且是待執(zhí)行優(yōu)先級(jí)較高的任務(wù)。

基于這個(gè)特性,我能想到的場(chǎng)景就是,發(fā)布消息,和修改消息,當(dāng)消息發(fā)布出去后,還未執(zhí)行,此時(shí)更新的消息又來(lái)了,這個(gè)時(shí)候未執(zhí)行的消息的版本比現(xiàn)在提交的消息版本要低就可以被丟棄了。因?yàn)殛?duì)列中還有可能存在消息版本更低的消息會(huì)排隊(duì)執(zhí)行,所以在真正處理消息的時(shí)候一定要做好消息的版本比較。

第三方實(shí)現(xiàn)的拒絕策略

dubbo中的線程拒絕策略 

  1. public class AbortPolicyWithReport extends ThreadPoolExecutor.AbortPolicy {  
  2.     protected static final Logger logger = LoggerFactory.getLogger(AbortPolicyWithReport.class);  
  3.     private final String threadName;  
  4.     private final URL url;  
  5.     private static volatile long lastPrintTime = 0 
  6.     private static Semaphore guard = new Semaphore(1);  
  7.     public AbortPolicyWithReport(String threadName, URL url) {  
  8.         this.threadName = threadName;  
  9.         this.url = url;  
  10.     }  
  11.     @Override  
  12.     public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {  
  13.         String msg = String.format("Thread pool is EXHAUSTED!" +  
  14.                         " Thread Name: %s, Pool Size: %d (active: %d, core: %d, max: %d, largest: %d), Task: %d (completed: %d)," +  
  15.                         " Executor status:(isShutdown:%s, isTerminated:%s, isTerminating:%s), in %s://%s:%d!",  
  16.                 threadName, e.getPoolSize(), e.getActiveCount(), e.getCorePoolSize(), e.getMaximumPoolSize(), e.getLargestPoolSize(),  
  17.                 e.getTaskCount(), e.getCompletedTaskCount(), e.isShutdown(), e.isTerminated(), e.isTerminating(),  
  18.                 url.getProtocol(), url.getIp(), url.getPort());  
  19.         logger.warn(msg);  
  20.         dumpJStack();  
  21.         throw new RejectedExecutionException(msg);  
  22.     }  
  23.     private void dumpJStack() {  
  24.        //省略實(shí)現(xiàn)  
  25.     }  

可以看到,當(dāng)dubbo的工作線程觸發(fā)了線程拒絕后,主要做了三個(gè)事情,原則就是盡量讓使用者清楚觸發(fā)線程拒絕策略的真實(shí)原因。

1)輸出了一條警告級(jí)別的日志,日志內(nèi)容為線程池的詳細(xì)設(shè)置參數(shù),以及線程池當(dāng)前的狀態(tài),還有當(dāng)前拒絕任務(wù)的一些詳細(xì)信息。可以說(shuō),這條日志,使用dubbo的有過(guò)生產(chǎn)運(yùn)維經(jīng)驗(yàn)的或多或少是見(jiàn)過(guò)的,這個(gè)日志簡(jiǎn)直就是日志打印的典范,其他的日志打印的典范還有spring。得益于這么詳細(xì)的日志,可以很容易定位到問(wèn)題所在

2)輸出當(dāng)前線程堆棧詳情,這個(gè)太有用了,當(dāng)你通過(guò)上面的日志信息還不能定位問(wèn)題時(shí),案發(fā)現(xiàn)場(chǎng)的dump線程上下文信息就是你發(fā)現(xiàn)問(wèn)題的救命稻草。

3)繼續(xù)拋出拒絕執(zhí)行異常,使本次任務(wù)失敗,這個(gè)繼承了JDK默認(rèn)拒絕策略的特性

擴(kuò)展閱讀:Dubbo 面試18問(wèn),你能接得住嗎?

Netty中的線程池拒絕策略 

  1. private static final class NewThreadRunsPolicy implements RejectedExecutionHandler {  
  2.         NewThreadRunsPolicy() {  
  3.             super();  
  4.         }  
  5.         public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {  
  6.             try {  
  7.                 final Thread t = new Thread(r, "Temporary task executor");  
  8.                 t.start();  
  9.             } catch (Throwable e) {  
  10.                 throw new RejectedExecutionException(  
  11.                         "Failed to start a new thread", e);  
  12.             }  
  13.         }  
  14.     } 

Netty中的實(shí)現(xiàn)很像JDK中的CallerRunsPolicy,舍不得丟棄任務(wù)。不同的是,CallerRunsPolicy是直接在調(diào)用者線程執(zhí)行的任務(wù)。而 Netty是新建了一個(gè)線程來(lái)處理的。

所以,Netty的實(shí)現(xiàn)相較于調(diào)用者執(zhí)行策略的使用面就可以擴(kuò)展到支持高效率高性能的場(chǎng)景了。但是也要注意一點(diǎn),Netty的實(shí)現(xiàn)里,在創(chuàng)建線程時(shí)未做任何的判斷約束,也就是說(shuō)只要系統(tǒng)還有資源就會(huì)創(chuàng)建新的線程來(lái)處理,直到new不出新的線程了,才會(huì)拋創(chuàng)建線程失敗的異常。推薦:什么是Netty?

activeMq中的線程池拒絕策略 

  1. new RejectedExecutionHandler() {  
  2.                 @Override  
  3.                 public void rejectedExecution(final Runnable r, final ThreadPoolExecutor executor) {  
  4.                     try {  
  5.                         executor.getQueue().offer(r, 60, TimeUnit.SECONDS);  
  6.                     } catch (InterruptedException e) {  
  7.                         throw new RejectedExecutionException("Interrupted waiting for BrokerService.worker");  
  8.                     }  
  9.                     throw new RejectedExecutionException("Timed Out while attempting to enqueue Task.");  
  10.                 }  
  11.             }); 

activeMq中的策略屬于最大努力執(zhí)行任務(wù)型,當(dāng)觸發(fā)拒絕策略時(shí),在嘗試一分鐘的時(shí)間重新將任務(wù)塞進(jìn)任務(wù)隊(duì)列,當(dāng)一分鐘超時(shí)還沒(méi)成功時(shí),就拋出異常

pinpoint中的線程池拒絕策略 

  1. public class RejectedExecutionHandlerChain implements RejectedExecutionHandler {  
  2.     private final RejectedExecutionHandler[] handlerChain;  
  3.     public static RejectedExecutionHandler build(List<RejectedExecutionHandler> chain) {  
  4.         Objects.requireNonNull(chain, "handlerChain must not be null");  
  5.         RejectedExecutionHandler[] handlerChain = chain.toArray(new RejectedExecutionHandler[0]);  
  6.         return new RejectedExecutionHandlerChain(handlerChain);  
  7.     }  
  8.     private RejectedExecutionHandlerChain(RejectedExecutionHandler[] handlerChain) {  
  9.         this.handlerChain = Objects.requireNonNull(handlerChain, "handlerChain must not be null");  
  10.     }  
  11.     @Override  
  12.     public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {  
  13.         for (RejectedExecutionHandler rejectedExecutionHandler : handlerChain) {  
  14.             rejectedExecutionHandler.rejectedExecution(r, executor);  
  15.         }  
  16.     }  

pinpoint的拒絕策略實(shí)現(xiàn)很有特點(diǎn),和其他的實(shí)現(xiàn)都不同。他定義了一個(gè)拒絕策略鏈,包裝了一個(gè)拒絕策略列表,當(dāng)觸發(fā)拒絕策略時(shí),會(huì)將策略鏈中的rejectedExecution依次執(zhí)行一遍。

結(jié)語(yǔ)

前文從線程池設(shè)計(jì)思想,以及線程池觸發(fā)拒絕策略的時(shí)機(jī)引出java線程池拒絕策略接口的定義。并輔以JDK內(nèi)置4種以及四個(gè)第三方開(kāi)源軟件的拒絕策略定義描述了線程池拒絕策略實(shí)現(xiàn)的各種思路和使用場(chǎng)景。

希望閱讀此文后能讓你對(duì)java線程池拒絕策略有更加深刻的認(rèn)識(shí),能夠根據(jù)不同的使用場(chǎng)景更加靈活的應(yīng)用。 

 

責(zé)任編輯:龐桂玉 來(lái)源: Java知音
相關(guān)推薦

2023-08-15 15:33:29

線程池線程數(shù)

2020-11-25 11:33:47

Java線程技術(shù)

2020-07-08 12:05:55

Java線程池策略

2021-02-05 12:34:33

線程池系統(tǒng)

2022-03-14 07:32:06

線程池拒絕策略自定義

2024-10-09 15:58:02

2020-07-28 08:59:22

JavahreadLocal面試

2021-09-10 18:47:22

Redis淘汰策略

2025-03-05 10:34:56

2024-11-11 17:27:45

2021-12-09 12:22:28

MyBatis流程面試

2023-06-07 08:08:43

JVM內(nèi)存模型

2025-02-11 08:31:37

Java關(guān)鍵字安全

2023-02-03 07:24:49

雙親委派模型

2021-12-06 11:03:57

JVM性能調(diào)優(yōu)

2021-12-27 08:22:18

Kafka消費(fèi)模型

2022-03-28 08:20:49

線程編程語(yǔ)言線程操作系統(tǒng)

2023-05-16 08:01:26

限流算法滑動(dòng)窗口

2021-04-26 17:23:21

JavaCAS原理

2020-10-12 18:00:39

JavaAQS代碼
點(diǎn)贊
收藏

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

国产成人精品免高潮在线观看| 欧美电影在线免费观看| 精品一区国产| 波多野结衣小视频| 天堂美国久久| 日韩精品在线一区二区| 欧美视频在线免费播放| 美女欧美视频在线观看免费| 老司机免费视频一区二区三区| 久久综合五月天| 先锋资源av在线| 日韩一区二区三区免费视频| 亚洲精品乱码久久久久久日本蜜臀| 91视频最新| 国产三级精品三级在线观看| 羞羞色午夜精品一区二区三区| 亚洲国产成人爱av在线播放| 欧美日韩在线观看不卡| 超碰97免费在线| 亚洲国产成人自拍| 国产91视觉| 亚洲一区 中文字幕| 亚洲久久一区| 久久视频在线观看免费| 免费人成又黄又爽又色| 在线综合色站| 欧美精品v国产精品v日韩精品| 精品无码一区二区三区在线| 蜜桃视频在线观看免费视频网站www | 日韩亚洲欧美一区二区三区| 免费在线激情视频| 欧美日韩在线视频免费观看| 国产精品卡一卡二卡三| 蜜桃传媒视频第一区入口在线看| 国产乱淫a∨片免费观看| 久久aⅴ国产紧身牛仔裤| 九九九久久久久久| 精品少妇一区二区三区密爱| 欧洲亚洲视频| 亚洲成人av片在线观看| 中文字幕66页| 国产日韩另类视频一区| 午夜精品福利一区二区三区蜜桃| 国产高潮呻吟久久久| 国产三区四区在线观看| 97精品国产97久久久久久久久久久久| 91黄色精品| 国产精品-色哟哟| 日本成人在线不卡视频| 日本国产精品视频| 五月婷婷视频在线| 亚洲日本成人| 97免费视频在线播放| 欧美黄片一区二区三区| 亚洲精品97| 久久久国产一区二区三区| 林心如三级全黄裸体| 激情综合网站| 中文字幕视频在线免费欧美日韩综合在线看 | 日韩欧美亚洲区| 日本一区二区三区在线观看视频| 成人免费高清视频在线观看| 国产精品二区在线| 成人无码一区二区三区| 成人午夜av影视| 国产精品乱码视频| 狠狠躁夜夜躁av无码中文幕| 岛国av在线一区| 成人永久免费| 人人妻人人澡人人爽久久av| 96av麻豆蜜桃一区二区| 茄子视频成人在线观看| 国产在线小视频| 国产精品污www在线观看| 亚洲一区在线直播| 亚洲区欧洲区| 亚洲成av人片一区二区三区| 阿v天堂2017| 深夜成人影院| 欧美高清一级片在线| 中文字幕欧美人妻精品一区| 在线观看爽视频| 欧美私模裸体表演在线观看| 国产九九在线观看| 蜜桃精品一区二区三区| 亚洲国产三级网| 91视频在线网站| 91精品精品| 97在线精品视频| 中文在线最新版天堂| 狠狠v欧美v日韩v亚洲ⅴ| 99热最新在线| 国产一级在线| 亚洲卡通动漫在线| 北条麻妃69av| 少妇精品视频在线观看| 亚洲国产精品国自产拍av秋霞| 久久丫精品国产亚洲av不卡| 久久电影院7| 欧美精品激情在线观看| www.com国产| 精品一区二区三区影院在线午夜| 国产成人免费电影| 激情综合闲人网| 1区2区3区精品视频| 少妇人妻无码专区视频| 亚洲成人1区| 日韩成人在线观看| 免费国产羞羞网站美图| 国产欧美成人| 亚洲影院色无极综合| 你懂的在线播放| 亚洲精品日日夜夜| 成年人在线观看视频免费| 欧州一区二区三区| 亚洲最大在线视频| 国产精品theporn动漫| 老司机免费视频一区二区三区| 精品国产乱码久久久久久丨区2区 精品国产乱码久久久久久蜜柚 | 中文一区二区| 亚洲自拍偷拍第一页| 日韩偷拍自拍| 一区二区三区成人| 啊啊啊国产视频| 国产欧美啪啪| 欧美精品情趣视频| 依依成人在线视频| 久久伊人蜜桃av一区二区| 成人一级生活片| 欧美一区=区三区| 亚洲天堂av在线播放| 日本三级中文字幕| 国产精品456| 欧美亚洲视频一区| 九九热这里有精品| 夜夜嗨av色一区二区不卡| 中文字幕在线观看免费视频| 国产成人精品午夜视频免费| 一区二区三区视频| 欧美va视频| 亚洲乱码一区二区| 国产精品国产三级国产专区52| 成人一级黄色片| 中文精品无码中文字幕无码专区| 99国内精品久久久久| 日韩中文字幕视频在线| 成人免费一区二区三区| 国产欧美日韩在线视频| 国产精品少妇在线视频| 最新亚洲精品| 国产成人精品一区二区| 精品视频二区| 色狠狠桃花综合| 男女做爰猛烈刺激| 三级亚洲高清视频| 日本一区二区不卡高清更新| 成人在线视频播放| 伊人久久五月天| 中文字幕在线网站| 国产精品看片你懂得| 中国黄色片一级| 影视亚洲一区二区三区| 91久久国产综合久久蜜月精品| av免费在线免费| 日韩欧美国产精品一区| 国产在线成人精品午夜| 91视频免费播放| 日本三区在线观看| 日本激情一区| 亚洲综合色激情五月| 欧洲性视频在线播放| 精品国产91九色蝌蚪| 日韩在线观看第一页| 久久蜜臀精品av| 向日葵污视频在线观看| 亚洲视频电影在线| 国内外成人免费视频| 欧美大胆成人| 色婷婷综合成人av| 不卡的日韩av| 性欧美疯狂xxxxbbbb| www.中文字幕av| 极品少妇一区二区| 可以看毛片的网址| 精品久久久亚洲| 亚洲伊人第一页| 天堂资源在线| 精品久久久999| 手机av免费在线观看| 日本韩国精品一区二区在线观看| 青青草自拍偷拍| 成人免费观看视频| 香蕉视频禁止18| 国内一区二区三区| 亚洲成人精品电影在线观看| 综合伊人久久| 国产精品成熟老女人| 午夜伦理在线视频| 亚洲精品视频在线观看视频| 97超碰人人草| 偷拍与自拍一区| 男人的午夜天堂| 99国产精品久| 992tv人人草| 美女尤物久久精品| 草草草视频在线观看| 精品美女久久久| 国产精品久久久久久久免费大片 | 日本加勒比一区| 欧美色涩在线第一页| 久久精品国产亚洲av无码娇色| 国产亚洲精品福利| 911亚洲精选| 久久99久久精品| 男人操女人免费软件| 国产精品v一区二区三区| 涩涩日韩在线| 四虎5151久久欧美毛片| 亚洲已满18点击进入在线看片| 久久爱91午夜羞羞| 国语自产在线不卡| 在线观看电影av| 国产一区二区三区在线观看网站| 高h放荡受浪受bl| 91精品国产色综合久久不卡蜜臀| 波多野结衣视频免费观看| 亚洲h动漫在线| 久久精品第一页| 中文字幕色av一区二区三区| 久久久久久久毛片| 91亚洲精品一区二区乱码| 免费在线观看日韩av| 精品一区二区三区久久久| 国产精品少妇在线视频| 午夜在线观看免费一区| 人妻无码久久一区二区三区免费| 女人香蕉久久**毛片精品| 亚洲欧洲另类精品久久综合| 欧美日韩xxxx| 欧美日韩一区二区三区免费| 婷婷综合一区| 狼狼综合久久久久综合网| 国产无遮挡裸体免费久久| 99久久精品免费看国产四区| 999精品视频在线观看| 国产在线观看不卡| 日韩美女在线| 成人激情综合网| 欧美激情福利| 国产日韩中文字幕在线| 日韩在线激情| 91啪国产在线| 国产专区精品| 91免费在线观看网站| 美国十次综合久久| 国产精品对白刺激久久久| 国产精品自在线拍| 狠狠色综合色区| 福利片一区二区| 精品一区国产| 欧美日韩123| 亚洲精品久久久久久一区二区| 日韩视频在线观看| 亚洲第一精品区| 中文字幕一区二区av| 青青青青在线视频| 99视频精品| 老头吃奶性行交视频| 免费成人小视频| 亚洲综合伊人久久| 成人永久免费视频| 成人免费网站黄| 国产精品麻豆欧美日韩ww| 国产97免费视频| 精品国产精品自拍| www.亚洲激情| 91精品国产欧美日韩| 后进极品白嫩翘臀在线视频| 亚洲精品一区久久久久久| 91精品国产综合久久久久久豆腐| www.日韩欧美| 久久99亚洲网美利坚合众国| 97香蕉久久超级碰碰高清版| a屁视频一区二区三区四区| 亚洲va电影大全| 欧美wwwwww| 亚洲一卡二卡三卡| 亚洲理论在线| www.com操| 成人免费不卡视频| 国产午夜精品久久久久久久久| 亚洲码国产岛国毛片在线| 偷偷操不一样的久久| 欧美日韩国产综合一区二区三区| a级片在线视频| 亚洲成人国产精品| 午夜伦全在线观看| 午夜精品视频在线| 亚洲色图综合| 免费观看成人高| 欧美在线播放| 国产免费视频传媒| 成人毛片在线观看| 登山的目的在线| 日韩欧美国产成人| www.色视频| 最近2019中文字幕大全第二页 | 蜜桃av噜噜一区二区三区麻豆| 亚洲性xxxx| 国产污视频在线播放| 91久久精品美女| 伊人久久大香线蕉无限次| 国产精品夜夜夜爽张柏芝| 老司机久久99久久精品播放免费| 丰满少妇中文字幕| 国产精品视频在线看| 国产又色又爽又黄的| 日韩一区二区在线看| 成人免费黄色网页| 91精品国产高清久久久久久| 国产亚洲观看| 亚洲国产一区在线| 久久大逼视频| 美女黄色一级视频| 亚洲美腿欧美偷拍| 中文字幕乱码人妻无码久久| 日韩精品视频在线播放| 欧美男男video| 成人午夜一级二级三级| 波多野结衣在线观看一区二区| 国产在线精品91| 成人av电影在线| 九九视频在线免费观看| 欧美精品免费视频| 99中文字幕一区| 日本视频久久久| 欧美aaaaaaaa牛牛影院| 精品成在人线av无码免费看| 国产一区二区三区免费| 成人黄色短视频| 欧美性受xxxx黑人xyx| 国产午夜精品一区理论片| 日本韩国欧美精品大片卡二| 亚洲视频分类| 男人操女人免费软件| 91麻豆成人久久精品二区三区| 国产极品美女高潮无套嗷嗷叫酒店| 欧美一区二区三区啪啪| 国产激情视频在线观看| 91在线视频一区| 91精品99| 国产精品欧美性爱| 亚洲一二三四在线观看| 日韩一区二区三区不卡| 97久久超碰福利国产精品…| 欧美国产不卡| 日韩成人手机在线| a美女胸又www黄视频久久| 日韩少妇高潮抽搐| 亚洲美腿欧美激情另类| 黄色精品视频| 一区二区视频在线播放| 国产成人亚洲精品狼色在线| 精品一区二区三区四| 亚洲精品www久久久| 久久爱91午夜羞羞| 一本一本久久a久久精品综合妖精| 九一九一国产精品| 久草国产在线观看| 日韩高清av一区二区三区| 小黄鸭精品aⅴ导航网站入口| 日本视频精品一区| 国产一区二区在线免费观看| 免费无遮挡无码永久在线观看视频 | 国产欧美一区二区三区在线老狼 | 欧美tickling网站挠脚心| 国产色播av在线| 亚洲人成影视在线观看| 国产成人午夜电影网| 中文字幕第15页| 色999日韩欧美国产| 亚洲高清在线一区| 日批视频在线免费看| 国产精品国产三级国产| 亚洲第一视频在线| 国产成人精品午夜| 女人色偷偷aa久久天堂 | 一区在线中文字幕| 欧美一级视频免费| 国产精品日韩精品| 在线精品在线| 日本黄区免费视频观看| 精品久久久久久综合日本欧美| 综合毛片免费视频| dy888午夜| 久久精品一二三| 亚洲精品久久久久久久久久久久久久| 日本久久中文字幕| 欧美三级第一页| 亚洲图片第一页|