精品欧美一区二区三区在线观看 _久久久久国色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)

色欲av无码一区二区三区| 亚洲精品偷拍视频| 成人一二三四区| 久久久久久美女精品| 欧美一区二区三区在线看| 国产av国片精品| 成年人免费在线视频| 国产精品亚洲午夜一区二区三区 | 成人高潮aa毛片免费| 久久久亚洲高清| 99porn视频在线| 黄色片视频免费| 欧美三级网页| 揄拍成人国产精品视频| 亚洲精品无码一区二区| 国产综合色在线观看| 亚洲国产精品久久久久秋霞影院| 五月天亚洲综合| 熟妇人妻中文av无码| 精品一区二区在线看| 欧美亚洲日本黄色| 免费在线一区二区三区| 97精品国产一区二区三区| 日韩精品视频三区| 色婷婷狠狠18禁久久| 国产激情欧美| 色偷偷久久人人79超碰人人澡| 肉大捧一出免费观看网站在线播放| 青青视频在线观| 成人短视频下载| 91成人理论电影| 亚洲最大成人在线视频| 久久伊人亚洲| 欧美有码在线观看| av大片免费观看| 激情91久久| 欧美成人全部免费| 黄色一级大片在线免费观看| 成人亚洲一区| 伊人久久大香线蕉av一区二区| aaaa黄色片| 欧美电影完整版在线观看| 精品国产乱码久久久久久图片 | 成人a v视频| 国产精品久久久亚洲一区| 久久人人爽人人爽人人片av高请| 国产大学生自拍| 91精品高清| 久久精品中文字幕电影| 亚洲aⅴ网站| 不卡影院免费观看| 97在线中文字幕| 国产精品乱码一区二区| 另类小说视频一区二区| 国产精品日韩在线观看| 中文字幕+乱码+中文字幕明步| 奶水喷射视频一区| 日韩美女免费线视频| 久久久国产精品成人免费| 亚洲大胆在线| 欧美一级在线播放| 天堂网视频在线| 久久精品盗摄| 国产精品一区二区性色av| 中文字幕一区二区三区波野结 | 亚洲人成亚洲人成在线观看图片| 亚洲乱码一区二区三区| 欧美三级黄网| 亚洲美女在线国产| 日韩小视频网站| 天堂av在线| 欧美亚洲国产怡红院影院| 欧美大尺度做爰床戏| 国产人妖一区| 日韩一区二区精品在线观看| 在线观看免费视频国产| 牛牛影视久久网| 亚洲视频免费一区| 污污的视频在线免费观看| 欧美三区不卡| 日本亚洲欧洲色| 一级黄色片在线| 国产成人免费视频精品含羞草妖精| 狠狠爱一区二区三区| 国产在线视频你懂得| 最新日韩av在线| 丰满少妇久久久| yy6080久久伦理一区二区| 日韩一区二区视频| 亚洲天堂成人av| 日韩成人影院| 国内成人精品一区| 亚洲一区二区影视| a美女胸又www黄视频久久| 日韩精品大片| www.youjizz.com在线| 91久久免费观看| youjizz.com日本| 欧美色图国产精品| 欧美极品美女电影一区| 中文区中文字幕免费看| 波波电影院一区二区三区| 五码日韩精品一区二区三区视频| 深夜国产在线播放| 欧美四级电影在线观看| 香蕉视频污视频| 91一区二区| 国产a∨精品一区二区三区不卡| 国产乱码精品一区二区| 久久久精品日韩欧美| 国产欧美精品aaaaaa片| 丁香婷婷久久| 精品丝袜一区二区三区| 久久国产在线视频| 精品亚洲porn| 亚洲a∨一区二区三区| 国产v日韩v欧美v| 日韩精品中文字幕在线不卡尤物| 成人激情五月天| 先锋影音久久| 国产精品免费一区二区三区四区| 免费a在线看| 欧美亚洲综合网| 成年人网站免费在线观看| 欧美日韩p片| 91香蕉国产在线观看| www在线免费观看| 91久久一区二区| www.色多多| 国产欧美日韩综合一区在线播放 | www.成人在线观看| 中文字幕在线观看不卡视频| 男女男精品视频站| 中日韩免视频上线全都免费| 77777少妇光屁股久久一区| 亚洲精品久久久久久动漫器材一区| 专区另类欧美日韩| 污污的视频免费| 成人羞羞动漫| 国产啪精品视频| 91在线视频| 欧美色图免费看| 四季av中文字幕| 日韩av高清在线观看| 日本不卡一区二区三区视频| 成人国产二区| 亚洲天堂影视av| 一级黄色在线观看| 国产精品视频九色porn| 三上悠亚av一区二区三区| 青草国产精品| 成人精品视频久久久久| 国产1区在线| 日韩一区二区电影| 久久99久久98精品免观看软件| 国产ts人妖一区二区| www.av91| 一道在线中文一区二区三区| 日本久久91av| 亚洲xxxxxx| 欧美一级久久久久久久大片| 久久久www成人免费毛片| 成人黄色av网站在线| 欧美变态另类刺激| 成人高清av| 91麻豆桃色免费看| 成年人视频免费在线播放| 亚洲第一免费播放区| 99久久精品国产亚洲| 欧美国产一区二区在线观看| 99九九精品视频| 亚洲网站啪啪| 欧美三级电影在线播放| 国产高潮失禁喷水爽到抽搐| 奇米777国产一区国产二区| 欧美一级电影久久| 日本在线观看网站| 欧美xxxx在线观看| 黄色片视频免费| 最新国产成人在线观看| 五十路六十路七十路熟婆| 玖玖玖国产精品| 蜜桃视频成人在线观看| 狼人天天伊人久久| 国产精品旅馆在线| 欧美14一18处毛片| 在线免费黄色小视频| 成人h动漫精品一区二区器材| 国内精品国产三级国产在线专| 日韩亚洲视频在线观看| 欧美日韩中文一区| 久久久全国免费视频| 91麻豆.com| 婷婷中文字幕在线观看| 亚洲国产精品一区| 亚洲一区二区三区免费看| 9l亚洲国产成人精品一区二三| 日av在线播放中文不卡| 国产成人在线视频免费观看| 亚洲欧美国内爽妇网| 999久久久久久| 日韩欧美在线视频免费观看| 爱爱视频免费在线观看| 久久久青草青青国产亚洲免观| 日韩av加勒比| 性娇小13――14欧美| 男女激烈动态图| 自拍亚洲一区| 国产精品久久久久久久久久久久午夜片 | 国产精品综合在线视频| 不要播放器的av网站| 在线精品一区二区| 国产av不卡一区二区| 国产亚洲一区二区三区不卡| 国产精品jizz视频| 精品久久久久久久久久岛国gif| 日本亚洲欧美三级| 激情黄产视频在线免费观看| 欧美老少做受xxxx高潮| 蜜桃视频网站在线| 在线播放日韩精品| 色综合成人av| 日韩av影视综合网| 999日本视频| 天天色天天射天天综合网| 中文字幕精品www乱入免费视频| 午夜国产在线视频| 亚洲成人精品视频在线观看| www.日日夜夜| 91精品国产综合久久久久久久 | 7777精品伊人久久久大香线蕉超级流畅 | 国产一级免费片| 国产一区二区不卡在线| 天天操狠狠操夜夜操| 免费在线欧美视频| 天天干在线影院| 日韩成人一区二区三区在线观看| 美女福利视频在线| 国产精品综合色区在线观看| 自拍日韩亚洲一区在线| 99热这里只有成人精品国产| 久久人人爽人人爽人人av| 国产一区二区三区自拍| 阿v天堂2018| 亚洲免费观看| 亚洲中文字幕无码专区| 国产日韩欧美三区| 日韩在线xxx| 日韩电影在线一区二区| 91插插插插插插插插| 免费视频最近日韩| 不卡的在线视频| 久久av老司机精品网站导航| 日本77777| 国产一区二区精品在线观看| 制服下的诱惑暮生| 国产91精品一区二区麻豆网站| 中文字幕人妻一区| www国产亚洲精品久久麻豆| 久久精品无码一区| 中文字幕一区二区三区四区不卡| 亚洲色偷偷综合亚洲av伊人| 伊人婷婷欧美激情| 日韩免费观看一区二区| 一本一道综合狠狠老| 中文在线最新版天堂| 欧美黄页免费| 国产成人一区三区| 国产成人精选| 99在线首页视频| 青青草久久爱| 亚洲a∨一区二区三区| 一区二区国产在线| 131美女爱做视频| 青青草一区二区三区| 国产精品久久久对白| 精品国产乱码一区二区三| 欧美一级日韩不卡播放免费| 天天操天天操天天干| 亚洲视频视频在线| a视频在线免费看| 欧美诱惑福利视频| 国产精品777777在线播放| 国产一区免费在线| 久久国产亚洲精品| 欧美日韩性生活片| 久久电影国产免费久久电影| 这里只有精品在线观看视频| 国产日韩欧美综合在线| 国产1区2区3区4区| 日本精品一区二区三区高清| 国产视频手机在线| 亚洲无限av看| 美女航空一级毛片在线播放| 国产精品极品美女在线观看免费| 久久伦理中文字幕| 日韩国产精品一区二区| 国产尤物精品| 色18美女社区| 久久久精品日韩欧美| 国产无精乱码一区二区三区| 欧美调教femdomvk| 日本人妖在线| 久久久免费精品视频| a屁视频一区二区三区四区| 国外成人免费视频| 中国成人一区| 亚洲精品怡红院| 97久久超碰国产精品| 欧美黄色免费观看| 欧美日韩国产精品成人| 免费一级在线观看播放网址| 欧美另类99xxxxx| 日韩黄色碟片| 涩涩涩999| 久久aⅴ乱码一区二区三区| avtt中文字幕| 亚洲天堂网中文字| 伊人22222| 色哟哟网站入口亚洲精品| 天天综合网天天| 蜜桃av久久久亚洲精品| 亚洲久久成人| 极品白嫩的小少妇| 亚洲男人天堂一区| 97人人爽人人爽人人爽| 中文字幕综合一区| 免费观看成人性生生活片| 久久综合九九| 亚洲欧美成人综合| 国产精品久久不卡| 婷婷丁香激情综合| 天天操天天舔天天干| 久久99国产综合精品女同| 精品一区二区三区亚洲| 三年中国中文在线观看免费播放| 毛片不卡一区二区| 免费黄色激情视频| 欧美日韩精品一区二区三区四区| 电影av一区| 国产精品一区二区久久久久| 高h放荡受浪受bl| 欧美视频一区二区三区四区| 爱久久·www| 国产在线拍揄自揄视频不卡99| 色综合蜜月久久综合网| 尤物国产在线观看| 亚洲天天做日日做天天谢日日欢| 国产三级自拍视频| 九九热精品视频| 国产精品极品在线观看| 少妇人妻无码专区视频| 91麻豆国产自产在线观看| 国产精品视频123| 永久免费精品影视网站| 欧美国产视频| 日韩精品免费一区| aaa欧美日韩| 波多野结衣黄色网址| 色噜噜狠狠狠综合曰曰曰88av | 亚洲免费高清| 熟女俱乐部一区二区视频在线| 在线免费一区三区| 免费大片黄在线观看视频网站| 97超碰资源| 美女久久一区| 亚洲a∨无码无在线观看| 91精品国产综合久久久久久| 电影k8一区二区三区久久| 久久精品日产第一区二区三区| 日韩va亚洲va欧美va久久| 色欲人妻综合网| 亚洲精品按摩视频| jizzjizz少妇亚洲水多| 2022中文字幕| 久久精品亚洲精品国产欧美kt∨| 亚洲午夜精品久久久| 欧美大秀在线观看| 免费成人av| www.桃色.com| 欧美性xxxx在线播放| 午夜免费福利在线观看| 高清一区二区三区视频| 日韩在线卡一卡二| 天天干中文字幕| 亚洲人成在线观看| 99ri日韩精品视频| 浓精h攵女乱爱av| 亚洲高清免费观看高清完整版在线观看| 男操女在线观看| 岛国一区二区三区高清视频| 久久亚洲美女| 国产小视频在线观看免费| 伊人亚洲福利一区二区三区| 综合久久成人| 三上悠亚在线一区| 激情成人中文字幕| 国产高清一区二区三区视频 | 亚洲男女av一区二区| 亚洲av无码国产精品久久|