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

Java8中新增新特性異步編程之CompletableFuture

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

環(huán)境:Java8

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

Future基本應用

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

1. Future結合Callable使用

單任務執(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í)行結果:" + result) ;
}

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

多個任務同時執(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個任務分別用時3,2,1s。future1用時最長。

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

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

CompletionService解決Future的缺點

CompletionService是一邊生產新的任務,一邊處理已經完成的任務。簡單地說就是CompletionService不管任務執(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í)行結果發(fā)現,任務的結果獲取是以誰先執(zhí)行完處理誰與任務的執(zhí)行先后沒有關系。

CompletableFuture異步編程

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

圖片圖片

2. 簡單異步任務鏈式調用執(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 任務執(zhí)行完成") ;
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
}, executor).thenRun(() -> {
  try {
    TimeUnit.SECONDS.sleep(2) ;
    System.out.println(Thread.currentThread().getName() + ", 2 任務執(zhí)行完成") ;
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
}) ;
System.out.println("主線程:" + Thread.currentThread().getName()) ;
executor.shutdown() ;

執(zhí)行結果:

圖片圖片

3. 獲取上一步任務執(zhí)行結果及任務完成處理

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

執(zhí)行結果:

圖片圖片

這里如果任務執(zhí)行的時候發(fā)生了異常那么在whenComplete方法中的res 會為空,tx為發(fā)生異常的對象。沒有異常時res有執(zhí)行的機構,tx異常對象為空。

4. 異步任務異常處理

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

這里我們人為的制造異常 1 / 0 。

執(zhí)行結果:

圖片圖片

根據執(zhí)行結果當發(fā)生異常時進入exceptionally方法,最終進入whenComplete方法此時 tx異常對象是發(fā)生異常的異常對象。

5. 所有任務完成才算完成任務

CompletableFuture.allOf

CompletableFuture<Double> calc1 = CompletableFuture.supplyAsync(() -> {
  try {
    TimeUnit.SECONDS.sleep(2) ;
    System.out.println(Thread.currentThread().getName() + ", calc1任務執(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任務執(zhí)行完成") ;
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
  return 20D ;
}, executor) ;
// 當任何一個任務發(fā)生異常,這里的tx都不會為null
CompletableFuture.allOf(calc1, calc2).whenComplete((res, tx) -> {
  System.out.println("獲取到結果:" + 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í)行結果:

圖片

在這里whenComplete中的res是沒有結果的,要獲取數據我們的分別調用get方法獲取。

6. handle方法對結果處理

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

執(zhí)行結果:

正確

圖片圖片

發(fā)生異常時:

圖片圖片

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

7. 合并異步任務

將兩個異步任務完成后合并處理

CompletableFuture.thenCombine

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

執(zhí)行結果:

圖片圖片

8. 異步任務誰快誰就進入下一步的執(zhí)行

CompletableFuture.applyToEither

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

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

執(zhí)行結果:

圖片圖片

9. 兩個異步任務都執(zhí)行完了才繼續(xù)執(zhí)行

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

CompletableFuture.runAfterBoth

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

執(zhí)行結果:

圖片圖片

10. 等待所有任務執(zhí)行完成

CompletableFuture.anyOf

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


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

執(zhí)行結果:

圖片圖片

11. 接收上一個任務的執(zhí)行結果

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

執(zhí)行結果:

圖片 圖片

責任編輯:武曉燕 來源: 實戰(zhàn)案例錦集
相關推薦

2020-05-29 07:20:00

Java8異步編程源碼解讀

2024-04-18 08:20:27

Java 8編程工具

2022-05-31 07:32:19

JDK8API工具

2021-02-21 14:35:29

Java 8異步編程

2013-08-06 13:58:27

2021-06-06 16:56:49

異步編程Completable

2017-12-21 15:48:11

JavaCompletable

2022-07-08 14:14:04

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

2021-03-02 09:34:41

Nodejs14前端代碼

2021-03-02 07:13:54

Java8版本升級

2021-03-04 08:14:37

Java8開發(fā)接口

2022-05-25 07:22:07

ES12JavaScript語言

2021-02-22 11:51:15

Java開發(fā)代碼

2024-10-09 08:42:03

2025-02-06 16:51:30

2024-08-06 09:43:54

Java 8工具編程

2014-07-15 14:48:26

Java8

2022-12-09 07:48:10

Java8Stream表達式

2022-12-30 09:24:23

Java8Stream操作

2024-10-14 08:29:14

異步編程任務
點贊
收藏

51CTO技術棧公眾號

国产va亚洲va在线va| 国产美女91呻吟求| 永久免费成人代码| 国产一区精品福利| 亚洲va欧美va天堂v国产综合| 日本日本精品二区免费| 国产视频一区二区三| 国产亚洲毛片在线| 久久精品国产一区二区三区| 日韩Av无码精品| 开心久久婷婷综合中文字幕| 午夜影院在线观看欧美| 中文有码久久| 久久av少妇| 国产成人av电影| 国产精品国模在线| 亚欧视频在线观看| 欧美久色视频| 日韩在线视频导航| 成人免费毛片糖心| 成人在线视频你懂的| 欧美性受xxxx黑人xyx| 一二三四视频社区在线| 欧美黄色免费看| 亚洲丝袜美腿一区| 欧美电视剧在线看免费| 狠狠躁狠狠躁视频专区| 末成年女av片一区二区下载| 一区二区三区产品免费精品久久75| 日本视频一区二区在线观看| 六月婷婷中文字幕| 国产91综合网| 91丝袜美腿美女视频网站| 久久久久久久久久影院| 亚洲午夜黄色| 久久99久久久久久久噜噜| 北条麻妃在线观看视频| 欧美精选视频在线观看| 亚洲人成在线观看网站高清| 黄色免费看视频| 9国产精品午夜| 日韩欧美高清在线| 久久久久久国产精品日本| 亚洲欧美在线人成swag| 欧美日韩精品一区二区三区四区 | 奇米网一区二区| 一区二区导航| 亚洲欧美激情四射在线日| 朝桐光av一区二区三区| 久久精品色综合| 亚洲成人久久一区| 特级西西人体4444xxxx| 首页亚洲中字| 亚洲精品综合精品自拍| 熟女俱乐部一区二区视频在线| 国产精品毛片av| 亚洲国产欧美一区| 少妇精品一区二区| 国产一区99| 夜夜嗨av色综合久久久综合网| 性欧美精品男男| 欧美综合久久| 久久夜色精品国产亚洲aⅴ| 国产人与禽zoz0性伦| 亚洲a在线视频| 欧美激情第三页| 国产精品7777777| 久久激情婷婷| 国产精品尤物福利片在线观看| 一本久道久久综合无码中文| 国产一区在线精品| 国产99午夜精品一区二区三区| 国产成人手机在线| 久久丝袜美腿综合| 亚洲视频小说| 蜜臀av在线| 黑人极品videos精品欧美裸| 人妻无码视频一区二区三区| 亚洲图片小说区| 亚洲第一视频在线观看| 色欲av无码一区二区三区| 日韩av大片| 欧美国产亚洲视频| 欧美一区二区三区不卡视频| 蜜臂av日日欢夜夜爽一区| 91精品国产综合久久久久久丝袜| 日韩在线观看视频网站| 欧美经典一区二区三区| www.亚洲成人网| 一根才成人网| 91精品国产综合久久香蕉麻豆| 亚洲成年人在线观看| 国产欧美日韩在线一区二区| 久久视频免费观看| 韩国av中文字幕| 精品一区二区三区在线观看| 精品国产一区二区三区麻豆小说 | 久久久久久久久久久久久久久久av | 捆绑调教一区二区三区| 国产一区二区三区高清| 在线免费观看黄色| 婷婷综合久久一区二区三区| 日韩av片专区| 国产精品美女久久久久久不卡| 久久亚洲精品成人| 日韩精品一区二区亚洲av| 国产乱人伦偷精品视频免下载| 久久久久资源| 污视频在线看网站| 在线观看精品一区| 国产视频精品视频| 亚洲成人日韩| 国产精品高清在线观看| 天天干天天摸天天操| 亚洲免费大片在线观看| 免费看国产黄色片| 欧美电影在线观看免费| 欧美精品在线极品| 一级全黄少妇性色生活片| 97se亚洲国产综合自在线| 波多野结衣与黑人| 日韩五码电影| 伊人男人综合视频网| 久久久久久久久影院| 国产成人激情av| 中文字幕中文字幕在线中心一区| 毛片无码国产| 国产丝袜一区二区| 日韩精品乱码久久久久久| 国产福利视频一区二区三区| 99热这里只有精品7| 国产成人77亚洲精品www| 亚洲视频在线视频| 国产www在线| 99精品国产视频| 黄网站欧美内射| 成人高潮a毛片免费观看网站| 九九久久久久99精品| 国产精品久久久久久无人区| 国产精品久久精品日日| 欧美一级特黄a| 成人在线免费视频观看| 国产精品久久久久一区二区| 九色在线免费| 欧美最猛性xxxxx直播| 欧美做受xxxxxⅹ性视频| 久久精品盗摄| 日韩av电影免费在线观看| 性欧美freehd18| 永久免费精品影视网站| 亚洲精品一区二三区| 亚洲国产高清aⅴ视频| 手机视频在线观看| 亚洲xxx拳头交| 国产精品xxx在线观看www| 草莓视频丝瓜在线观看丝瓜18| 精品国产在天天线2019| 圆产精品久久久久久久久久久| 99精品桃花视频在线观看| 男女av免费观看| 欧美色图在线播放| 91欧美激情另类亚洲| 日本一本在线免费福利| 精品福利在线导航| 人人爽人人爽人人片av| 中文一区在线播放| 丰满人妻一区二区三区53视频| 欧美日韩一区自拍| 久久综合一区| 欧美在线se| 久久久久国产精品www| 欧洲毛片在线| 欧美日韩高清一区二区三区| 中文字幕在线观看成人| 91亚洲永久精品| 鲁一鲁一鲁一鲁一av| 亚洲精品2区| 久久精精品视频| 国产欧美自拍| 久久久久久成人精品| 日韩在线免费看| 91精品国产综合久久久久久久| 国产亚洲精品久久久久久打不开 | 91激情视频在线观看| 久草热8精品视频在线观看| 日韩小视频网站| 精品av一区二区| 99九九视频| 日本成人片在线| 欧美激情精品久久久久久蜜臀| 欧美理论在线观看| 欧美一区二区久久久| 中文字幕视频网| 亚洲精品亚洲人成人网| 中国美女乱淫免费看视频| 国产伦精品一区二区三区在线观看| 内射国产内射夫妻免费频道| 亚洲91视频| 欧洲精品久久| 国产三级精品三级在线观看国产| 国产精品久久77777| 俄罗斯一级**毛片在线播放 | 久久久7777| 日韩精品视频中文字幕| 国产精品黄色av| 精品众筹模特私拍视频| 日日噜噜噜夜夜爽亚洲精品 | 97精品人妻一区二区三区在线| 亚洲成在人线在线播放| 亚洲一二三在线观看| 久久久精品黄色| 国产国语老龄妇女a片| 久热成人在线视频| 91在线视频观看免费| 国产精品综合| 日韩伦理在线免费观看| 亚洲最大黄网| 在线观看一区欧美| 精品国产精品久久一区免费式| 久久国产日韩欧美| 凹凸成人在线| 91久久大香伊蕉在人线| 粉嫩av国产一区二区三区| 国产精品激情av电影在线观看| 日韩影院在线| 91精品国产色综合久久不卡98口| 99热国产在线| 久久成人精品一区二区三区| 午夜在线视频| 最近更新的2019中文字幕| 国产1区2区3区在线| 亚洲人成在线免费观看| 青青青免费视频在线2| 亚洲国内精品视频| 日韩中文字幕免费观看| 亚洲成人激情图| 日批视频在线播放| 亚洲精品国产电影| 台湾av在线二三区观看| 亚洲成人在线视频播放| 搡老岳熟女国产熟妇| 日韩毛片中文字幕| 色就是色亚洲色图| 亚洲欧美综合v| 国产香蕉视频在线看| 中文字幕精品网| 日本激情视频在线观看| 伊人精品在线观看| 毛片在线视频| 精品中文字幕在线观看| 国精产品一区一区三区mba下载| 久久久亚洲国产天美传媒修理工| 久草在线新免费首页资源站| 欧美极品美女视频网站在线观看免费| 成人超碰在线| 538国产精品一区二区免费视频| 丝袜老师在线| 国产精品99久久久久久www| 高清电影一区| 91精品视频在线| 深夜福利一区| 久久精品国产精品青草色艺 | 午夜影院免费在线观看| 色爱区综合激月婷婷| 一区二区自拍偷拍| 欧美一区二区日韩| 天堂网www中文在线| 亚洲欧美在线一区二区| 日本高清视频在线观看| 欧美国产视频一区二区| 三上悠亚激情av一区二区三区 | 国产一伦一伦一伦| 国产精品一区不卡| 亚洲图片综合网| 国产欧美日韩中文久久| 91在线播放观看| 午夜欧美视频在线观看| 波多野结衣一区二区在线| 91精品国产综合久久久久久| 亚洲人妻一区二区| 日韩中文字幕av| 波多野结衣在线播放| 国产成人精彩在线视频九色| 国产精品高清一区二区| 麻豆精品视频| 亚洲综合婷婷| 国产一区二区视频免费在线观看| 黄一区二区三区| 三级男人添奶爽爽爽视频| 中文字幕在线播放不卡一区| 国产亚洲欧美久久久久| 欧美日韩在线综合| 少妇精品视频一区二区 | 农村妇女精品一区二区| 色呦呦网站一区| 成 人片 黄 色 大 片| 伊人青青综合网站| av中文字幕在线看| 成人疯狂猛交xxx| 青青视频一区二区| 亚洲av综合色区| 日本成人中文字幕在线视频| 99re这里只有| 亚洲精选视频免费看| 免费精品一区二区| 日韩av在线高清| 欧美人与性动交α欧美精品图片| 国产成人综合久久| 极品一区美女高清| 亚洲精品天堂成人片av在线播放| 日本成人在线一区| 90岁老太婆乱淫| 午夜精品爽啪视频| 精品久久久久中文慕人妻| 最新亚洲国产精品| 丝袜美腿一区| 美脚丝袜一区二区三区在线观看| 韩日成人av| 青娱乐国产精品视频| 国产精品午夜在线| 亚洲无码精品一区二区三区| 亚洲国产日韩欧美在线动漫| 手机电影在线观看| 99se婷婷在线视频观看| 亚洲人metart人体| 亚洲一区二区三区观看| 国产精品久久久久久久久免费樱桃| 无码人妻av一区二区三区波多野 | 国产精品情侣呻吟对白视频| 欧美日韩在线视频首页| 日本激情一区二区| 欧美激情视频一区二区三区不卡| 精品一区视频| 日韩视频在线免费播放| 国产一区二区三区在线观看免费 | 污网站在线免费看| 91久久精品一区二区别| 综合一区二区三区| 国产女同无遮挡互慰高潮91| 国产精品国产三级国产有无不卡 | 亚洲成人久久一区| av美女在线观看| 国产伦理一区二区三区| 亚洲精品色图| 人妻丰满熟妇aⅴ无码| 欧美午夜无遮挡| 久久久久久久影视| 国产精品久久久久久一区二区| 青青一区二区三区| 中文字幕国产免费| 亚洲免费在线看| 亚洲国产视频一区二区三区| 国语自产精品视频在免费| 欧美丝袜足交| 97公开免费视频| 中文字幕亚洲视频| 99久久一区二区| 97人人模人人爽人人喊中文字| 亚洲资源网你懂的| 一区二区三区网址| 一区二区三区中文在线| 人妻中文字幕一区| 国产精品久久久久77777| 99久久影视| 四虎永久免费观看| 色婷婷久久综合| 久热国产在线| 国产精品美女黄网| 老司机精品视频网站| 五月婷婷六月香| 欧美v亚洲v综合ⅴ国产v| 老色鬼在线视频| 亚洲国产激情一区二区三区| 国产精品一区一区| 中文字幕视频网| 久久香蕉国产线看观看av| 鲁大师精品99久久久| 五月婷婷激情久久| 一区二区三区不卡在线观看| 精品亚洲综合| 亚洲最大成人在线| 性8sex亚洲区入口| 婷婷激情四射网| 国产视频久久久久| 99综合久久| 欧美激情国产精品日韩| 亚洲人成在线观看一区二区| 午夜视频在线播放| 成人亚洲欧美一区二区三区| 一区二区毛片| 性色av无码久久一区二区三区| 日韩精品在线免费观看| 996久久国产精品线观看| 欧美日韩在线中文| 亚洲综合区在线| av在线日韩国产精品| 精品久久久久久亚洲| 国产一区二区看久久| 草莓视频18免费观看| 欧美激情在线观看|