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

漂亮人妻被黑人久久精品| 亚洲巨乳在线观看| 青青国产在线观看| 成人免费av| 日韩精品影音先锋| 国产资源在线视频| 日本中文字幕在线播放| 国产99精品视频| 国产91在线播放精品91| 紧身裙女教师波多野结衣| 老司机精品视频在线播放| 欧美视频日韩视频在线观看| 国产一区二区片| 高清日韩av电影| 成人综合婷婷国产精品久久蜜臀| 国产精品高潮呻吟久久av黑人| a在线视频播放观看免费观看| 欧美男人操女人视频| 91精品国产丝袜白色高跟鞋| 夫妻免费无码v看片| 黄色免费在线网站| 国产亚洲欧美激情| 国产日韩久久| aaa一区二区三区| 免费xxxx性欧美18vr| 性金发美女69hd大尺寸| chinese全程对白| 国产91久久精品一区二区| 精品福利av导航| www.51色.com| 日本久久久久| 欧美色综合影院| 日韩久久一级片| 成年人视频免费在线播放| 亚洲欧洲美洲综合色网| 日本亚洲欧洲精品| 美女欧美视频在线观看免费| 99综合电影在线视频| 99re在线观看视频| 国产福利免费视频| 国产一区二区三区在线观看免费| 国产精品夫妻激情| 亚洲 欧美 中文字幕| 国产欧美大片| 韩国国内大量揄拍精品视频| 欧美高清视频一区二区三区| 51精产品一区一区三区| 视频一区视频二区国产精品 | 日韩高清av在线| 乱码一区二区三区| 日韩欧美中文字幕一区二区三区| 欧美裸体一区二区三区| 男人添女人下面免费视频| 欧美羞羞视频| 欧美性色欧美a在线播放| 成人午夜视频免费在线观看| 亚洲三级欧美| 欧美性jizz18性欧美| www.浪潮av.com| 欧美大片免费| 精品视频123区在线观看| 色哟哟精品视频| 国产黄色一区| 欧美精品一卡两卡| 丰满少妇中文字幕| 高潮久久久久久久久久久久久久 | 成人在线播放视频| 国产精品美女久久久久aⅴ| 天天人人精品| 久久久久久久久免费视频| 综合色中文字幕| 屁屁影院ccyy国产第一页| www在线看| 一本色道久久加勒比精品 | 国产成人一区在线| 国产日韩欧美亚洲一区| 日本a一级在线免费播放| 91网站在线播放| 天堂精品一区二区三区| 亚洲91av| 一本大道av伊人久久综合| 99热这里只有精品在线播放| 国产精品va视频| 精品日韩在线一区| 国产在线观看无码免费视频| 成人久久电影| 欧美大片在线看| 国产精品久久久久久人| 老司机免费视频一区二区三区| 91国产在线播放| 日韩偷拍自拍| 亚洲免费观看高清完整| 亚洲午夜无码av毛片久久| 成人涩涩视频| 精品国产免费一区二区三区四区| 中文字幕人妻一区二区| 91tv官网精品成人亚洲| 91国产精品91| 国产精品一区二区免费视频| fc2成人免费人成在线观看播放| 日韩在线三区| 污网站在线免费看| 日本电影亚洲天堂一区| 韩国一区二区三区四区| 成人av二区| 久久免费视频观看| 一本久道久久综合无码中文| 成人黄色大片在线观看| 中文字幕在线亚洲精品 | 国产精品久久久久久久久免费看 | 一级片免费网址| 毛片av中文字幕一区二区| 国产伦精品一区二区三区高清| aaa在线免费观看| 亚洲成av人**亚洲成av**| 日本国产一级片| 欧美精品momsxxx| 国产+成+人+亚洲欧洲| 中文字幕在线网址| 久久综合久久鬼色| 无码粉嫩虎白一线天在线观看 | 麻豆成人在线播放| 在线欧美三级| 欧美日本视频在线| 欧美特级黄色录像| 在线视频亚洲| 99精彩视频| 日本免费中文字幕在线| 欧洲一区二区av| 美女又爽又黄视频毛茸茸| 国产精品v日韩精品v欧美精品网站 | 蜜桃av.com| 秋霞电影网一区二区| 日本一区二区精品视频| 最近高清中文在线字幕在线观看1| 欧美大片一区二区| 免费在线黄色网| 国产做a爰片久久毛片 | 欧美日韩亚洲三区| 91在线观看免费网站| 9191在线| 欧美日韩五月天| 天天色天天综合| 美女一区二区久久| 亚洲精品欧美精品| 国产精品4hu.www| 日韩中文字幕免费视频| 怡红院男人的天堂| 国产精品毛片高清在线完整版| 免费激情视频在线观看| 国产精品羞羞答答在线观看| 欧美一级视频免费在线观看| 三级视频在线| 色婷婷久久久久swag精品| 精品无人区无码乱码毛片国产 | 国产精品成人a在线观看| 国产精品免费网站| 日本在线视频网| 欧美喷潮久久久xxxxx| 国产精品视频在| 国内成+人亚洲+欧美+综合在线 | 综合久久2019| 亚洲成年人在线| 影音先锋在线国产| 欧美激情一二三区| 欧美国产在线一区| 亚洲电影成人| 欧美日韩免费精品| 欧美97人人模人人爽人人喊视频| 色妞久久福利网| 99热这里只有精品99| 亚洲福中文字幕伊人影院| 特级西西人体wwwww| 青青草国产成人av片免费| 丰满女人性猛交| 国产福利一区二区精品秒拍| 7m精品福利视频导航| 国产在线黄色| 欧美一级电影网站| 91看片在线播放| 欧美激情一区二区三区不卡| 久久aaaa片一区二区| 久久av一区二区三区| 亚洲自拍的二区三区| 成人春色在线观看免费网站| 国产成人久久久| 中中文字幕av在线| 亚洲毛片在线观看| 国产欧美熟妇另类久久久| 香蕉影视欧美成人| 99成人在线观看| 91蜜桃婷婷狠狠久久综合9色| 中文字幕天天干| 99热精品在线| 在线观看视频黄色| 亚洲毛片免费看| 亚洲最大福利视频网| 在线高清av| 久久69精品久久久久久久电影好 | 日本久久伊人| 日本精品久久久久久久| a在线免费观看| 亚洲色无码播放| 国产91免费在线观看| 欧美专区亚洲专区| 国产又色又爽又黄的| 亚洲视频一区二区在线| 国产熟妇久久777777| 国产精品69毛片高清亚洲| 国产精品涩涩涩视频网站| 欧美黄色免费| 亚洲国产欧洲综合997久久| 精品国内亚洲2022精品成人| 成人午夜小视频| 高清av一区二区三区| 97视频在线免费观看| 影音先锋在线播放| 久久精品成人动漫| 大片免费播放在线视频| 亚洲国产精品久久久久| 国产美女永久免费| 欧美日韩亚洲不卡| 免费在线观看av的网站| 欧美日韩美女在线观看| 青娱乐国产精品| 中文字幕日韩欧美一区二区三区| 老牛影视av老牛影视av| 99国产精品国产精品久久| 色哟哟在线观看视频| 国内精品视频一区二区三区八戒| 91极品尤物在线播放国产| 久久一区中文字幕| 99精品在线免费视频| 国语自产精品视频在线看8查询8| 4444在线观看| 女人香蕉久久**毛片精品| 欧美日韩视频免费在线观看| 清纯唯美日韩| 日韩在线观看电影完整版高清免费| 竹菊久久久久久久| 麻豆久久久av免费| 国产欧美一区二区三区精品观看 | 国内在线精品| 亚洲欧美日韩中文在线| 你懂的在线视频| 亚洲图片欧美日产| 国产免费视频在线| 最近2019免费中文字幕视频三| av天在线观看| x99av成人免费| 国产成人午夜| 欧美精品一区三区| jizz一区二区三区| 91成人天堂久久成人| 欧美gay囗交囗交| 国产精品美女久久久久av超清| 亚洲精品555| 成人黄色生活片| 日本在线成人| 国产自产精品| 亚洲精品动态| 亚洲国产欧美日韩| 欧美va天堂在线| 日韩视频在线视频| 久久午夜av| 亚洲涩涩在线观看| 国产精品一品视频| 极品粉嫩小仙女高潮喷水久久| 久久无码av三级| 成人性视频免费看| 夜夜嗨av一区二区三区四季av | 久久99精品国产一区二区三区| 婷婷成人影院| 亚洲精品成人自拍| 欧美一区91| 成人免费在线小视频| 久久电影国产免费久久电影| 潘金莲一级淫片aaaaa| 99久久精品国产一区| 久久久久亚洲av成人无码电影| 国产精品九色蝌蚪自拍| 精品亚洲永久免费| 在线观看成人小视频| 成人av手机在线| 亚洲毛片在线免费观看| 国产欧美久久久久久久久| 97成人在线视频| 日韩黄色在线| 国产在线欧美日韩| 91精品一区国产高清在线gif | 亚洲精品国产系列| 精品二区视频| 老司机午夜性大片| aa级大片欧美| 暗呦丨小u女国产精品| 欧美性xxxxx| 精品欧美在线观看| 亚洲图片欧洲图片av| 国产嫩草在线视频| 成人av色在线观看| 伊人成综合网yiren22| www国产免费| 日本一不卡视频| 怡红院一区二区| 亚洲九九爱视频| 最近中文字幕免费在线观看| 精品国产乱码久久久久久图片 | www.国产黄色| 国产一区二区三区欧美| 久草在线资源福利站| 91亚洲国产精品| 日本一区二区在线看| 国产精品后入内射日本在线观看| 国产一区二区三区在线观看精品| 国产真人做爰视频免费| 亚洲成精国产精品女| 99久久夜色精品国产亚洲| 在线看欧美日韩| 欧美性xxx| 久久精品国产精品国产精品污| 欧美日韩调教| 一卡二卡三卡四卡五卡| 国产精品国产自产拍高清av | 精品一区二区久久久| 91成年人网站| 欧美性高潮在线| 人妻无码中文字幕| 久久91亚洲精品中文字幕奶水| 久久久国产精品网站| 日韩在线观看电影完整版高清免费| 夜夜爽av福利精品导航| 国产69视频在线观看| 一区二区三区免费在线观看| 国产精品久久久久久久久久久久久久久久久久 | 99国产精品国产精品久久| 国产污片在线观看| 精品福利在线导航| 成年人黄色大片在线| 国产精品久久久对白| 好吊视频一区二区三区四区| 国产xxx在线观看 | 欧美午夜小视频| av一区二区三区| 久久亚洲精品国产| 亚洲欧洲中文天堂| 久久毛片亚洲| 日韩精品福利视频| 免费观看成人av| 久久嫩草捆绑紧缚| 欧美一区二区三区免费视频| a免费在线观看| 99影视tv| aa亚洲婷婷| 中文字幕在线1| 欧美日韩激情在线| a在线免费观看| 国产精品久久久久久久久久久久午夜片 | 人人妻人人做人人爽| 北条麻妃一区二区三区| 亚洲s码欧洲m码国产av| 一色桃子一区二区| 电影一区中文字幕| 国产二区视频在线| 久久一日本道色综合| 中文字幕福利视频| 久久综合亚洲社区| 超碰成人97| 欧美精品色婷婷五月综合| 国产清纯美女被跳蛋高潮一区二区久久w| 又骚又黄的视频| 欧美成人激情视频| 国偷自产av一区二区三区| 37pao成人国产永久免费视频| 国产视频一区在线观看| 国产伦精品一区二区三区四区| 欧美国产日韩一区二区三区| 一本久久青青| 国产一区二区在线观看免费视频| 一区二区三区高清在线| 深夜福利视频一区| 国产日韩在线视频| 亚洲三级网站| 国产又粗又长又黄的视频| 欧美xxxxxxxx| 日本国产欧美| 国产成人一区二区三区别| 国产日韩在线不卡| 性中国古装videossex| 日本电影亚洲天堂| 五月精品视频| 少妇大叫太粗太大爽一区二区| 欧美日韩国产高清一区二区三区| 国产白丝在线观看| 亚洲欧洲久久| 99久久久无码国产精品| 一区二区三区黄| 欧美在线视频免费观看| 欧美在线免费| 伊人网在线视频观看| 精品免费视频.|