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

強(qiáng)大的異步任務(wù)處理類CompletableFuture使用詳解

開發(fā) 前端
Future是從JDK1.5開始有的,目的是獲取異步任務(wù)執(zhí)行的結(jié)果,通常情況會(huì)結(jié)合ExecutorService及Callable一起使用。

環(huán)境:Java8

在Java 8中, 新增加了一個(gè)CompletableFuture類,該類提供了差不多50個(gè)左右的方法(都是用來完成各種異步場(chǎng)景需求),并且結(jié)合了Future的優(yōu)點(diǎn)(繼承自Future類),提供了比Future更為強(qiáng)大的功能,這使得在異步編程方面變的簡(jiǎn)單,同時(shí)還提供了函數(shù)式編程的能力,可以通過回調(diào)的方式處理計(jì)算結(jié)果,并且提供了轉(zhuǎn)換和組合CompletableFuture的各種方法。

Future基本應(yīng)用

Future是從JDK1.5開始有的,目的是獲取異步任務(wù)執(zhí)行的結(jié)果,通常情況會(huì)結(jié)合ExecutorService及Callable一起使用。

1. Future結(jié)合Callable使用

單任務(wù)執(zhí)行

private static class Task implements Callable<String> {


  @Override
  public String call() throws Exception {
    TimeUnit.SECONDS.sleep(3) ;
    return "success";
  }


}
public static void main(String[] args) throws Exception {
  ThreadPoolExecutor executor = new ThreadPoolExecutor(3, 3, 60, TimeUnit.SECONDS, new ArrayBlockingQueue<>(10)) ;
  Future<String> future = executor.submit(new Task()) ;
  String result = future.get() ;
  System.out.println("執(zhí)行結(jié)果:" + result) ;
}

當(dāng)執(zhí)行到future.get()方法的時(shí)候會(huì)阻塞,等待3s后繼續(xù)執(zhí)行。

多個(gè)任務(wù)同時(shí)執(zhí)行

private static class Task implements Callable<String> {
  private int sleep ;
  public Task(int sleep) {
    this.sleep = sleep ;
  }


  @Override
  public String call() throws Exception {
    TimeUnit.SECONDS.sleep(this.sleep) ;
    return "success";
  }
}
public static void main(String[] args) throws Exception {
  ThreadPoolExecutor executor = new ThreadPoolExecutor(3, 3, 60, TimeUnit.SECONDS, new ArrayBlockingQueue<>(10)) ;
  Future<String> future1 = executor.submit(new Task(3)) ;
  Future<String> future2 = executor.submit(new Task(2)) ;
  Future<String> future3 = executor.submit(new Task(1)) ;
  String result1 = future1.get() ;
  String result2 = future2.get() ;
  String result3 = future3.get() ;
  System.out.println("result1:" + result1 + "\t" + "result2:" + result2 + "\t" + "result3:" + result3) ;
}

以上代碼執(zhí)行的3個(gè)任務(wù)分別用時(shí)3,2,1s。future1用時(shí)最長(zhǎng)。

從運(yùn)行的結(jié)果看到即便future2, future3執(zhí)行時(shí)間短也必須等待future1執(zhí)行完后才會(huì)繼續(xù),雖然你可以倒過來獲取結(jié)果,但是在實(shí)際項(xiàng)目中的應(yīng)用你應(yīng)該是不能確認(rèn)每個(gè)任務(wù)執(zhí)行需要多長(zhǎng)時(shí)間,誰先執(zhí)行完就先獲取誰。

雖然這種同步阻塞的方式在有些場(chǎng)景下還是很有必要的。但由于它的同步阻塞導(dǎo)致了當(dāng)前線程不能干其它的事必須一致等待。

CompletionService解決Future的缺點(diǎn)

CompletionService是一邊生產(chǎn)新的任務(wù),一邊處理已經(jīng)完成的任務(wù)。簡(jiǎn)單地說就是CompletionService不管任務(wù)執(zhí)行先后順序,誰先執(zhí)行完就處理誰。

private static class Task implements Callable<String> {
  private int time;
  private String name ;
  public Task(int time, String name) {
    this.time = time ;
    this.name = name ;
  }
  @Override
  public String call() throws Exception {
    TimeUnit.SECONDS.sleep(this.time) ;
    return name ;
  }


}
public static void main(String[] args) throws Exception {
  ThreadPoolExecutor pool = new ThreadPoolExecutor(3, 3, 60, TimeUnit.SECONDS, new ArrayBlockingQueue<>(10)) ;
  CompletionService<String> cs = new ExecutorCompletionService<>(pool) ;
  cs.submit(new Task(3, "name" + 3)) ;
  cs.submit(new Task(1, "name" + 1)) ;
  cs.submit(new Task(2, "name" + 2)) ;
  for (int i = 0; i < 3; i++) {
    System.out.println(cs.take().get()) ;
  }
}

通過執(zhí)行結(jié)果發(fā)現(xiàn),任務(wù)的結(jié)果獲取是以誰先執(zhí)行完處理誰與任務(wù)的執(zhí)行先后沒有關(guān)系。

2. CompletableFuture異步編程

CompletableFuture通過如下4個(gè)靜態(tài)方法來執(zhí)行異步任務(wù)

圖片圖片

2.1 簡(jiǎn)單異步任務(wù)鏈?zhǔn)秸{(diào)用執(zhí)行

ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 5, 60, TimeUnit.SECONDS, new ArrayBlockingQueue<>(10)) ;
CompletableFuture.runAsync(() -> {
  try {
    TimeUnit.SECONDS.sleep(3) ;
    System.out.println(Thread.currentThread().getName() + ", 1 任務(wù)執(zhí)行完成") ;
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
}, executor).thenRun(() -> {
  try {
    TimeUnit.SECONDS.sleep(2) ;
    System.out.println(Thread.currentThread().getName() + ", 2 任務(wù)執(zhí)行完成") ;
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
}) ;
System.out.println("主線程:" + Thread.currentThread().getName()) ;
executor.shutdown() ;

執(zhí)行結(jié)果:

圖片圖片

2.2 獲取上一步任務(wù)執(zhí)行結(jié)果及任務(wù)完成處理

CompletableFuture.supplyAsync(() -> {
  try {
    TimeUnit.SECONDS.sleep(3) ;
    System.out.println(Thread.currentThread().getName() + ", 1 任務(wù)執(zhí)行完成") ;
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
  return "1" ;
}, executor).thenApply(res -> {
  System.out.println("獲取到上一步任務(wù)執(zhí)行結(jié)果:" + res) ;
  try {
    TimeUnit.SECONDS.sleep(2) ;
    System.out.println(Thread.currentThread().getName() + ", 2 任務(wù)執(zhí)行完成") ;
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
  return "2" ;
}).whenComplete((res, tx) -> {
  System.out.println("獲取到結(jié)果:" + res) ;
  if (tx != null) {
    System.err.println("發(fā)生錯(cuò)誤了:" + tx.getMessage()) ;
  }
  executor.shutdown();
}) ;
System.out.println("主線程:" + Thread.currentThread().getName()) ;

執(zhí)行結(jié)果:

圖片圖片

這里如果任務(wù)執(zhí)行的時(shí)候發(fā)生了異常那么在whenComplete方法中的res 會(huì)為空,tx為發(fā)生異常的對(duì)象。沒有異常時(shí)res有執(zhí)行的機(jī)構(gòu),tx異常對(duì)象為空。

2.3 異步任務(wù)異常處理

CompletableFuture.supplyAsync(() -> {
  try {
    TimeUnit.SECONDS.sleep(3) ;
    System.out.println(Thread.currentThread().getName() + ", 1 任務(wù)執(zhí)行完成") ;
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
  return "1" ;
}, executor).thenApply(res -> {
  System.out.println("獲取到上一步任務(wù)執(zhí)行結(jié)果:" + res) ;
  try {
    TimeUnit.SECONDS.sleep(2) ;
    System.out.println(Thread.currentThread().getName() + ", 2 任務(wù)執(zhí)行完成") ;
    System.out.println(1 / 0) ;
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
  return "2" ;
}).exceptionally(tx -> {
  System.out.println(Thread.currentThread().getName() + ", 任務(wù)執(zhí)行發(fā)生了異常") ;
  return "error" ;
}).whenComplete((res, tx) -> {
  System.out.println("獲取到結(jié)果:" + res) ;
  if (tx != null) {
    System.err.println("發(fā)生錯(cuò)誤了:" + tx.getMessage()) ;
  }
  executor.shutdown();
}) ;
System.out.println("主線程:" + Thread.currentThread().getName()) ;

這里我們?nèi)藶榈闹圃飚惓?1 / 0 。

執(zhí)行結(jié)果:

圖片圖片

根據(jù)執(zhí)行結(jié)果當(dāng)發(fā)生異常時(shí)進(jìn)入exceptionally方法,最終進(jìn)入whenComplete方法此時(shí) tx異常對(duì)象是發(fā)生異常的異常對(duì)象。

2.4 所有任務(wù)完成才算完成任務(wù)

CompletableFuture.allOf

CompletableFuture<Double> calc1 = CompletableFuture.supplyAsync(() -> {
  try {
    TimeUnit.SECONDS.sleep(2) ;
    System.out.println(Thread.currentThread().getName() + ", calc1任務(wù)執(zhí)行完成") ;
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
  return 10D ;
}, executor) ;


CompletableFuture<Double> calc2 = CompletableFuture.supplyAsync(() -> {
  try {
    TimeUnit.SECONDS.sleep(5) ;
    System.out.println(Thread.currentThread().getName() + ", calc2任務(wù)執(zhí)行完成") ;
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
  return 20D ;
}, executor) ;
// 當(dāng)任何一個(gè)任務(wù)發(fā)生異常,這里的tx都不會(huì)為null
CompletableFuture.allOf(calc1, calc2).whenComplete((res, tx) -> {
  System.out.println("獲取到結(jié)果:" + res + ", " + tx) ;
  try {
    System.out.println(calc1.get()) ;
    System.out.println(calc2.get()) ;
  } catch (InterruptedException e) {
    e.printStackTrace();
  } catch (ExecutionException e) {
    e.printStackTrace();
  }
  executor.shutdown();
}) ;

執(zhí)行結(jié)果:

圖片圖片

在這里whenComplete中的res是沒有結(jié)果的,要獲取數(shù)據(jù)我們的分別調(diào)用get方法獲取。

2.5 handle方法對(duì)結(jié)果處理

CompletableFuture.supplyAsync(() -> {
  try {
    TimeUnit.SECONDS.sleep(2) ;
    System.out.println(Thread.currentThread().getName() + ", 1 任務(wù)執(zhí)行完成") ;
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
  return "0" ;
}, executor).handle((res, tx) -> {
  // 處理結(jié)果數(shù)據(jù)
  return res + "1" ;
}).whenComplete((res, tx) -> {
  System.out.println("獲取到結(jié)果:" + res) ;
  if (tx != null) {
    System.err.println("發(fā)生錯(cuò)誤了:" + tx.getMessage()) ;
  }
  executor.shutdown();
}) ;

執(zhí)行結(jié)果:

正確

圖片圖片

發(fā)生異常時(shí):

圖片

當(dāng)發(fā)生異常時(shí)handle方法中的res是沒有值的,tx異常對(duì)象為發(fā)生異常的異常對(duì)象。

2.6 合并異步任務(wù)

將兩個(gè)異步任務(wù)完成后合并處理

CompletableFuture.thenCombine

CompletableFuture<Double> task1 = CompletableFuture.supplyAsync(() -> {
  try {
    TimeUnit.SECONDS.sleep(2) ;
    System.out.println(Thread.currentThread().getName() + ", 任務(wù)1執(zhí)行完成") ;
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
  return 10d ;
}, executor) ;
CompletableFuture<Double> task2 = CompletableFuture.supplyAsync(() -> {
  try {
    TimeUnit.SECONDS.sleep(2) ;
    System.out.println(Thread.currentThread().getName() + ", 任務(wù)2執(zhí)行完成") ;
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
  return 20d ;
}, executor) ;
task1.thenCombine(task2, (t1, t2) -> {
  System.out.println(Thread.currentThread().getName() + ", 合并任務(wù)完成") ;
  return t1 + "," + t2 ;
}).whenComplete((res, tx) -> {
  System.out.println("獲取到結(jié)果:" + res) ;
  if (tx != null) {
    System.err.println("發(fā)生錯(cuò)誤了:" + tx.getMessage()) ;
  }
  executor.shutdown();
}) ;

執(zhí)行結(jié)果:

圖片圖片

2.7 異步任務(wù)誰快誰就進(jìn)入下一步的執(zhí)行

CompletableFuture.applyToEither

兩個(gè)異步任務(wù)誰先執(zhí)行完誰就繼續(xù)執(zhí)行后續(xù)的操作。

CompletableFuture<Double> task1 = CompletableFuture.supplyAsync(() -> {
  try {
    TimeUnit.SECONDS.sleep(2) ;
    System.out.println(Thread.currentThread().getName() + ", 任務(wù)1執(zhí)行完成") ;
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
  return 10d ;
}, executor) ;
CompletableFuture<Double> task2 = CompletableFuture.supplyAsync(() -> {
  try {
    TimeUnit.SECONDS.sleep(2) ;
    System.out.println(Thread.currentThread().getName() + ", 任務(wù)2執(zhí)行完成") ;
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
  return 20d ;
}, executor) ;
task1.applyToEither(task2, res -> {
  return res ;
}).whenComplete((res, tx) -> {
  System.out.println("獲取到結(jié)果:" + res) ;
  if (tx != null) {
    System.err.println("發(fā)生錯(cuò)誤了:" + tx.getMessage()) ;
  }
  executor.shutdown();
}) ;

執(zhí)行結(jié)果:

圖片圖片

2.8 兩個(gè)異步任務(wù)都執(zhí)行完了才繼續(xù)執(zhí)行

只有兩個(gè)任務(wù)都執(zhí)行完成了后才會(huì)繼續(xù)。

CompletableFuture.runAfterBoth

CompletableFuture<Double> task1 = CompletableFuture.supplyAsync(() -> {
  try {
    TimeUnit.SECONDS.sleep(2) ;
    System.out.println(Thread.currentThread().getName() + ", 任務(wù)1執(zhí)行完成") ;
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
  return 10d ;
}, executor) ;
CompletableFuture<Double> task2 = CompletableFuture.supplyAsync(() -> {
  try {
    TimeUnit.SECONDS.sleep(2) ;
    System.out.println(Thread.currentThread().getName() + ", 任務(wù)2執(zhí)行完成") ;
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
  return 20d ;
}, executor) ;
task1.runAfterBoth(task2, () -> {
  System.out.println("任務(wù)都執(zhí)行完成了...") ;
}).whenComplete((res, tx) -> {
  System.out.println("獲取到結(jié)果:" + res) ;
  if (tx != null) {
    System.err.println("發(fā)生錯(cuò)誤了:" + tx.getMessage()) ;
  }
  executor.shutdown();
}) ;

執(zhí)行結(jié)果:

圖片圖片

2.9 任意一個(gè)任務(wù)執(zhí)行完成就算完成

CompletableFuture.anyOf

CompletableFuture<String> task1 = CompletableFuture.supplyAsync(() -> {
  sleep(1000) ;
  System.out.println("我是任務(wù)1") ;
  return "Task1" ;
}, executor) ;


CompletableFuture<String> task2 = CompletableFuture.supplyAsync(() -> {
  sleep(3000) ;
  System.out.println("我是任務(wù)2") ;
  System.out.println(1 / 0) ;
  return "Task2" ;
}, executor) ;
// 任意一個(gè)任務(wù)執(zhí)行完成就算完成
// 當(dāng)任務(wù)執(zhí)行發(fā)生異常后,th才不會(huì)為null
CompletableFuture.anyOf(task1, task2).whenCompleteAsync((v, th) -> {
  System.out.println("v = " + v) ;
  System.out.println("th = " + th) ;
}, executor) ;

執(zhí)行結(jié)果:

圖片圖片

2.10 接收上一個(gè)任務(wù)的執(zhí)行結(jié)果

CompletableFuture.supplyAsync(() -> {
  sleep(2000) ;
  System.out.println("第一個(gè)任務(wù)執(zhí)行完成...") ;
  // System.out.println(1 / 0) ;
  return new Random().nextInt(10000) ;
}, executor).thenAcceptAsync(res -> { // 接收上一個(gè)任務(wù)的執(zhí)行結(jié)果
  System.out.println("任務(wù)執(zhí)行結(jié)果:" + res) ;
}, executor) ;

執(zhí)行結(jié)果:

圖片圖片

以上是本篇文章的全部?jī)?nèi)容,希望對(duì)你有幫助。

責(zé)任編輯:武曉燕 來源: Spring全家桶實(shí)戰(zhàn)案例源碼
相關(guān)推薦

2015-06-16 11:06:42

JavaCompletable

2021-06-06 16:56:49

異步編程Completable

2024-10-14 13:12:59

2025-02-28 09:20:00

Future開發(fā)代碼

2017-12-21 15:48:11

JavaCompletable

2024-10-14 08:29:14

異步編程任務(wù)

2023-01-03 10:38:04

函數(shù)計(jì)算技術(shù)

2024-01-11 12:14:31

Async線程池任務(wù)

2024-12-26 12:59:39

2024-04-18 08:20:27

Java 8編程工具

2014-12-02 10:02:21

Android異步任務(wù)

2024-08-06 09:43:54

Java 8工具編程

2021-02-21 14:35:29

Java 8異步編程

2010-12-01 14:34:59

AsyncTask異步處理任務(wù)Android

2022-07-08 14:14:04

并發(fā)編程異步編程

2025-04-30 01:50:00

C#異步編程

2022-04-19 09:03:22

Linuxcron命令

2022-05-13 12:34:16

美團(tuán)開發(fā)實(shí)踐

2020-05-29 07:20:00

Java8異步編程源碼解讀

2022-09-16 11:23:59

Python框架Celery
點(diǎn)贊
收藏

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

一区二区三区日韩视频| 国产精品久久久久秋霞鲁丝 | 91网在线看| 懂色av一区二区夜夜嗨| 91精品国产自产91精品| 免费视频91蜜桃| 久久中文字幕一区二区| 欧美日韩中文字幕| 五月天综合婷婷| 手机福利小视频在线播放| 男女性色大片免费观看一区二区 | 亚洲国产日韩欧美在线动漫| 国产天堂在线播放| 久久www人成免费看片中文| 久久久精品中文字幕麻豆发布| 成人国产精品一区二区| 国产www在线| 久久亚洲精品中文字幕蜜潮电影| 日韩精品一区二区三区蜜臀 | 成人午夜碰碰视频| 国产精品亚洲片夜色在线| 国产一级aa大片毛片| 清纯唯美亚洲综合一区| 日韩av网址在线| 天天干天天曰天天操| 三上悠亚国产精品一区二区三区| 一区二区三区美女视频| 视频一区三区| 亚洲 小说区 图片区 都市| 国产资源在线一区| 国产精品成人品| 天天操天天摸天天干| 偷偷www综合久久久久久久| 亚洲欧美另类人妖| 国产精品久久久久久在线观看| 亚洲影视资源| 欧美日韩在线免费视频| 久久久久久香蕉| 免费高潮视频95在线观看网站| 精品人妻二区中文字幕| 色哟哟免费在线观看| 久久人人97超碰com| 精品免费日产一区一区三区免费| 国产毛片一区二区三区va在线| 日本不卡一二三区黄网| 国产99在线|中文| 亚洲天堂一区在线观看| 影院欧美亚洲| 97久久超碰福利国产精品…| 久青草免费视频| 亚洲天堂偷拍| 隔壁老王国产在线精品| 国产精品自拍视频一区| 亚洲国产专区| 7777kkkk成人观看| 日日夜夜狠狠操| 天堂午夜影视日韩欧美一区二区| 人九九综合九九宗合| 91玉足脚交嫩脚丫在线播放| 母乳一区在线观看| 日韩男女性生活视频| 波多野结衣视频网址| 免费成人av资源网| 国产综合香蕉五月婷在线| 国产又粗又大又黄| 国产精品自拍三区| 国产精品国模大尺度私拍| 人妻精品无码一区二区| 2欧美一区二区三区在线观看视频| 国产主播一区二区三区四区| 日夜干在线视频| 欧美激情资源网| 中文字幕日韩一区二区三区| av毛片在线看| 亚洲成人1区2区| 麻豆av免费在线| 日韩一区二区三免费高清在线观看| 69av一区二区三区| 亚洲乱妇老熟女爽到高潮的片| 一区二区三区亚洲变态调教大结局| 精品国产1区2区3区| av无码一区二区三区| 精品久久国产| 久久av在线看| 五月天婷婷网站| 视频一区视频二区中文字幕| 91久久在线播放| 欧美 日韩 国产 成人 在线| 国产午夜精品理论片a级大结局 | 亚洲午夜精品在线观看| 麻豆视频一区| 色噜噜狠狠狠综合曰曰曰88av| 国产免费无码一区二区视频| 国产欧美日韩亚洲一区二区三区| 国产精品视频自在线| 精品黑人一区二区三区在线观看| aaa亚洲精品| 致1999电视剧免费观看策驰影院| 国产偷倩在线播放| 欧美伊人精品成人久久综合97| 国产亚洲色婷婷久久| 国产中文精品久高清在线不| 欧美成人性色生活仑片| 国产一级片av| 成人免费高清视频| 午夜精品区一区二区三| 24小时免费看片在线观看| 欧美亚洲综合一区| 男人网站在线观看| 亚洲澳门在线| 欧美中文字幕精品| 午夜精品一二三区| 国产精品久久午夜夜伦鲁鲁| 国产真人做爰毛片视频直播| 国产福利一区二区三区在线播放| 亚洲精品av在线播放| 日韩精品一区二区亚洲av性色| 性感少妇一区| 国产区一区二区| 影音先锋在线视频| 欧美日韩国产首页| 强伦人妻一区二区三区| 亚洲国产一区二区三区高清 | www男人的天堂| 欧美韩日一区二区三区四区| 免费在线观看亚洲视频| 超碰cao国产精品一区二区| www.国产精品一二区| 无码人妻精品一区二区三区9厂| 成人一区二区在线观看| 日本精品福利视频| 国产精品一级在线观看| 按摩亚洲人久久| 在线免费观看高清视频| 久久久亚洲午夜电影| 那种视频在线观看| 亚洲小说图片| 欧美专区中文字幕| 天堂在线中文网| 性感美女久久精品| 日本一区二区在线免费观看| 欧美va天堂在线| 亚洲一区亚洲二区亚洲三区| 国产三区在线观看| 欧美一区二区精品在线| 成人在线观看免费完整| 精品一区二区三区免费观看| 一区二区不卡在线视频 午夜欧美不卡' | 国产精品视频黄色| 精品av一区二区| 国产精品成久久久久三级| 视频二区在线| 欧美日韩一区二区在线| 久久亚洲AV成人无码国产野外| 一区二区三区导航| 久久久免费看| av高清一区| 色妞在线综合亚洲欧美| 国产又粗又长又黄| 怡红院av一区二区三区| 亚洲色图欧美另类| 亚洲视频大全| 色噜噜狠狠一区二区三区| 国产亚洲欧美日韩精品一区二区三区 | 欧美高清视频一区二区三区在线观看 | 精品久久久久中文字幕小说 | 国产成人精品亚洲线观看| 97精品国产97久久久久久春色 | 久久影视电视剧免费网站清宫辞电视| 国产偷拍一区二区| 亚洲高清一区二区三区| 狠狠人妻久久久久久综合蜜桃| 国产精品最新自拍| 亚洲欧洲精品一区二区三区波多野1战4 | 国产大学生校花援交在线播放| 欧美日韩国产精品成人| 破处女黄色一级片| 91免费视频大全| 美女网站色免费| 欧美精品国产| 欧美精品一区二区三区在线四季| 福利精品在线| 欧美极品少妇xxxxⅹ免费视频| 色视频在线观看福利| 欧美色爱综合网| 久久亚洲精品大全| 国产日韩欧美精品电影三级在线 | 日本视频www色| 亚洲私人影院在线观看| 亚洲欧美在线不卡| 精品一区中文字幕| 欧美 日韩 亚洲 一区| 日韩视频在线观看| 精品国产免费一区二区三区 | 日韩综合一区二区| 黄色录像特级片| 久久99国产成人小视频| 99国产在线观看| 高清亚洲高清| 91产国在线观看动作片喷水| 欧美日本高清| 亚洲人精品午夜在线观看| 国内精品国产成人国产三级| 在线观看欧美黄色| 久久高清免费视频| 亚洲欧美另类在线| 国产又黄又粗视频| 成a人片亚洲日本久久| 亚洲一区二区福利视频| 先锋a资源在线看亚洲| www.18av.com| 99久久99视频只有精品| 欧美精品亚洲| 久久夜色电影| 国产精品播放| 欧美日韩午夜电影网| 国产精品日韩专区| 极品美女一区| 欧美一级电影久久| 麻豆av在线免费观看| 久热精品在线视频| 98在线视频| 亚洲视频在线免费观看| 天天av综合网| 亚洲国产精品成人一区二区| 精品人妻一区二区三区日产乱码 | 一区二区三区四区av| 亚洲欧美另类日本| 中文字幕免费观看一区| 日本少妇高潮喷水xxxxxxx| 99re在线精品| 最近中文字幕无免费| 不卡区在线中文字幕| 催眠调教后宫乱淫校园| 国产成人鲁色资源国产91色综| 午夜一区二区视频| 久久精品国产久精国产| 天天干天天操天天玩| 男男成人高潮片免费网站| 成年人在线观看视频免费| 日精品一区二区| 久久久久久久片| 日本不卡在线视频| 超碰在线97免费| 奇米一区二区三区| 日韩av片网站| 精品伊人久久久久7777人| 亚洲天堂伊人网| 国产一区激情在线| 麻豆传媒在线看| 国产.欧美.日韩| 国产不卡一二三| 91麻豆.com| 精品亚洲aⅴ无码一区二区三区| 国产日韩高清在线| 成人无码精品1区2区3区免费看| 国产精品麻豆网站| 成人涩涩小片视频日本| 亚洲精品高清在线观看| 国产一级特黄视频| 欧美日韩在线影院| а中文在线天堂| 3d动漫精品啪啪| 人妻夜夜爽天天爽| 亚洲欧美日韩国产中文专区| 岛国在线大片| 久久久久999| 2019中文字幕在线电影免费| 青青久久av北条麻妃海外网| 91tv国产成人福利| 欧美午夜精品电影| 国产裸体无遮挡| 精品sm在线观看| 经典三级在线| 久久伊人精品视频| 欧美13videosex性极品| 国产精品成人久久久久| 日韩高清一区| 久久免费视频1| 欧美激情成人| av在线播放亚洲| 蜜桃视频在线观看一区| 自拍视频第一页| 国产免费成人在线视频| 农村妇女精品一区二区| 欧美日韩一二三四五区| 国产精品久久久久毛片| 亚洲国产精久久久久久| 中文日本在线观看| 性欧美xxxx视频在线观看| 日韩av免费| 成人自拍偷拍| 国产精品探花在线观看| 中国一级黄色录像| 噜噜噜躁狠狠躁狠狠精品视频 | 中文字字幕在线中文| 7777精品久久久大香线蕉| 神宫寺奈绪一区二区三区| 色偷偷噜噜噜亚洲男人| 性欧美xxx69hd高清| 亚洲自拍欧美另类| 欧美精品一区二区久久| 东北少妇不带套对白| 美国毛片一区二区三区| 在线观看国产三级| 一区二区三区成人| 中文字幕在线播放日韩| 日韩精品视频免费在线观看| 制服丝袜中文字幕在线| 国产精品人成电影| 欧美aaaaaaaa牛牛影院| 亚洲av首页在线| 裸体一区二区三区| 国产免费一区二区三区网站免费| 亚洲一区二区三区视频在线播放| 91成品人影院| 在线日韩第一页| 桃花岛tv亚洲品质| 精品无码久久久久久久动漫| 欧美日韩国产亚洲一区| 亚洲色图 在线视频| 久久久久久久久久电影| 国产成人精品a视频一区| 日韩欧美中文字幕公布| 国产人成网在线播放va免费| 国产精品黄页免费高清在线观看| 鲁大师精品99久久久| 久久久久久免费看| 国产大陆a不卡| 亚洲国产成人精品综合99| 欧美精品 日韩| 米奇777四色精品人人爽| 国产精品色悠悠| 日韩电影免费网站| 一区二区在线播放视频| 欧美国产在线观看| 国产精品国产精品国产| 亚洲欧美综合精品久久成人| 一区二区乱码| 免费在线成人av| 翔田千里一区二区| 国产三级av在线播放| 欧美在线观看一二区| 国产小视频在线播放| 日韩免费观看网站| 日韩电影一区| 久久久久久久高清| 亚洲欧美偷拍卡通变态| 99久久久国产精品无码网爆| 欧美成人免费播放| **爰片久久毛片| av免费看网址| 久久综合色8888| 国产午夜无码视频在线观看| 在线精品国产成人综合| 欧洲午夜精品| 97在线免费视频观看| 成人久久18免费网站麻豆| 日韩免费在线视频观看| 亚洲美女视频网| 高清在线一区| 久久久国内精品| av高清不卡在线| 91视频在线视频| 久久国产一区二区三区| 97一区二区国产好的精华液| 国产精品无码人妻一区二区在线| 久久综合视频网| 亚洲天堂999| 欧美韩国理论所午夜片917电影| 国产suv精品一区| 免费男同深夜夜行网站| 自拍偷拍国产精品| 色噜噜在线播放| 国产精品一久久香蕉国产线看观看| 一区二区中文字| 国产中文字幕一区二区| 欧美日精品一区视频| 欧美寡妇性猛交xxx免费| 欧美另类高清视频在线| 精品一区二区综合| www.com国产| 久久国产色av| 妖精一区二区三区精品视频| 日本黄色的视频| 精品久久中文字幕| 黄网站在线播放| 欧美成人综合一区| 狠狠色丁香久久婷婷综合_中 | 日韩免费电影网站| 国产伦精品一区二区三区视频金莲| 一本一道久久a久久综合精品| 成人国产精品视频| 在线播放精品视频| 97超级碰碰碰| 欧美一区二区三区另类| 91视频免费观看网站| 精品欧美久久久| 激情久久99| 99精品免费在线观看|