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

Java生成隨機數的4種方式,以后就用它了!

開發 后端
本文我們介紹 4 種生成隨機數的方法,其中 Math 是對 Random 的封裝,所以二者比較類似。Random 生成的是偽隨機數,是以當前納秒時間作為種子數的,并且在多線程競爭比較激烈的情況下因為要進行 CAS 操作,所以存在一定的性能問題,但對于絕大數應用場景來說,使用 Random 已經足夠了。

[[405510]]

在 Java 中,生成隨機數的場景有很多,所以本文我們就來盤點一下 4 種生成隨機數的方式,以及它們之間的區別和每種生成方式所對應的場景。

1.Random

Random 類誕生于 JDK 1.0,它產生的隨機數是偽隨機數,也就是有規則的隨機數。Random 使用的隨機算法為 linear congruential pseudorandom number generator (LGC) 線性同余法偽隨機數。在隨機數生成時,隨機算法的起源數字稱為種子數(seed),在種子數的基礎上進行一定的變換,從而產生需要的隨機數字。

Random 對象在種子數相同的情況下,相同次數生成的隨機數是相同的。比如兩個種子數相同的 Random 對象,第一次生成的隨機數字完全相同,第二次生成的隨機數字也完全相同。默認情況下 new Random() 使用的是當前納秒時間作為種子數的。

① 基礎使用

使用 Random 生成一個從 0 到 10 的隨機數(不包含 10),實現代碼如下:

  1. // 生成 Random 對象 
  2. Random random = new Random(); 
  3. for (int i = 0; i < 10; i++) { 
  4.     // 生成 0-9 隨機整數 
  5.     int number = random.nextInt(10); 
  6.     System.out.println("生成隨機數:" + number); 

以上程序的執行結果為:

② 優缺點分析

Random 使用 LGC 算法生成偽隨機數的優點是執行效率比較高,生成的速度比較快。

它的缺點是如果 Random 的隨機種子一樣的話,每次生成的隨機數都是可預測的(都是一樣的)。如下代碼所示,當我們給兩個線程設置相同的種子數的時候,會發現每次產生的隨機數也是相同的:

  1. // 創建兩個線程 
  2. or (int i = 0; i < 2; i++) { 
  3.    new Thread(() -> { 
  4.        // 創建 Random 對象,設置相同的種子 
  5.        Random random = new Random(1024); 
  6.        // 生成 3 次隨機數 
  7.        for (int j = 0; j < 3; j++) { 
  8.            // 生成隨機數 
  9.            int number = random.nextInt(); 
  10.            // 打印生成的隨機數 
  11.            System.out.println(Thread.currentThread().getName() + ":" + 
  12.                               number); 
  13.            // 休眠 200 ms 
  14.            try { 
  15.                Thread.sleep(200); 
  16.            } catch (InterruptedException e) { 
  17.                e.printStackTrace(); 
  18.            } 
  19.            System.out.println("---------------------"); 
  20.        } 
  21.    }).start(); 

以上程序的執行結果為:

③ 線程安全問題

當我們要使用一個類時,我們首先關心的第一個問題是:它是否為線程安全?對于 Random 來說,Random 是線程安全的。

  • PS:線程安全指的是在多線程的場景下,程序的執行結果和預期的結果一致,就叫線程安全的,否則則為非線程安全的(也叫線程安全問題)。比如有兩個線程,第一個線程執行 10 萬次 ++ 操作,第二個線程執行 10 萬次 -- 操作,那么最終的結果應該是沒加也沒減,如果程序最終的結果和預期不符,則為非線程安全的。

我們來看 Random 的實現源碼:

  1. public Random() { 
  2.     this(seedUniquifier() ^ System.nanoTime()); 
  3.  
  4. public int nextInt() { 
  5.     return next(32); 
  6.  
  7. protected int next(int bits) { 
  8.     long oldseed, nextseed; 
  9.     AtomicLong seed = this.seed; 
  10.     do { 
  11.         oldseed = seed.get(); 
  12.         nextseed = (oldseed * multiplier + addend) & mask; 
  13.     } while (!seed.compareAndSet(oldseed, nextseed)); // CAS(Compare and Swap)生成隨機數 
  14.     return (int)(nextseed >>> (48 - bits)); 
  • PS:本文所有源碼來自于 JDK 1.8.0_211。

從以上源碼可以看出,Random 底層使用的是 CAS(Compare and Swap,比較并替換)來解決線程安全問題的,因此對于絕大數隨機數生成的場景,使用 Random 不乏為一種很好的選擇。

  • PS:Java 并發機制實現原子操作有兩種:一種是鎖,一種是 CAS。

CAS 是 Compare And Swap(比較并替換)的縮寫,java.util.concurrent.atomic 中的很多類,如(AtomicInteger AtomicBoolean AtomicLong等)都使用了 CAS 機制來實現。

2.ThreadLocalRandom

ThreadLocalRandom 是 JDK 1.7 新提供的類,它屬于 JUC(java.util.concurrent)下的一員,為什么有了 Random 之后還會再創建一個 ThreadLocalRandom?

原因很簡單,通過上面 Random 的源碼我們可以看出,Random 在生成隨機數時使用的 CAS 來解決線程安全問題的,然而 CAS 在線程競爭比較激烈的場景中效率是非常低的,原因是 CAS 對比時老有其他的線程在修改原來的值,所以導致 CAS 對比失敗,所以它要一直循環來嘗試進行 CAS 操作。所以在多線程競爭比較激烈的場景可以使用 ThreadLocalRandom 來解決 Random 執行效率比較低的問題。

當我們第一眼看到 ThreadLocalRandom 的時候,一定會聯想到一次類 ThreadLocal,確實如此。ThreadLocalRandom 的實現原理與 ThreadLocal 類似,它相當于給每個線程一個自己的本地種子,從而就可以避免因多個線程競爭一個種子,而帶來的額外性能開銷了。

① 基礎使用

接下來我們使用 ThreadLocalRandom 來生成一個 0 到 10 的隨機數(不包含 10),實現代碼如下:

  1. // 得到 ThreadLocalRandom 對象 
  2. ThreadLocalRandom random = ThreadLocalRandom.current(); 
  3. for (int i = 0; i < 10; i++) { 
  4.     // 生成 0-9 隨機整數 
  5.     int number = random.nextInt(10); 
  6.     // 打印結果 
  7.     System.out.println("生成隨機數:" + number); 

以上程序的執行結果為:

② 實現原理

ThreadLocalRandom 的實現原理和 ThreadLocal 類似,它是讓每個線程持有自己的本地種子,該種子在生成隨機數時候才會被初始化,實現源碼如下:

  1. public int nextInt(int bound) { 
  2.     // 參數效驗 
  3.     if (bound <= 0) 
  4.         throw new IllegalArgumentException(BadBound); 
  5.     // 根據當前線程中種子計算新種子 
  6.     int r = mix32(nextSeed()); 
  7.     int m = bound - 1; 
  8.     // 根據新種子和 bound 計算隨機數 
  9.     if ((bound & m) == 0) // power of two 
  10.         r &= m; 
  11.     else { // reject over-represented candidates 
  12.         for (int u = r >>> 1; 
  13.              u + m - (r = u % bound) < 0; 
  14.              u = mix32(nextSeed()) >>> 1) 
  15.             ; 
  16.     } 
  17.     return r; 
  18.  
  19. final long nextSeed() { 
  20.     Thread t; long r; // read and update per-thread seed 
  21.     // 獲取當前線程中 threadLocalRandomSeed 變量,然后在種子的基礎上累加 GAMMA 值作為新種子 
  22.     // 再使用 UNSAFE.putLong 將新種子存放到當前線程的 threadLocalRandomSeed 變量中 
  23.     UNSAFE.putLong(t = Thread.currentThread(), SEED, 
  24.                    r = UNSAFE.getLong(t, SEED) + GAMMA);  
  25.     return r; 

③ 優缺點分析

ThreadLocalRandom 結合了 Random 和 ThreadLocal 類,并被隔離在當前線程中。因此它通過避免競爭操作種子數,從而在多線程運行的環境中實現了更好的性能,而且也保證了它的線程安全。

另外,不同于 Random, ThreadLocalRandom 明確不支持設置隨機種子。它重寫了 Random 的setSeed(long seed) 方法并直接拋出了 UnsupportedOperationException異常,因此降低了多個線程出現隨機數重復的可能性。

源碼如下:

  1. public void setSeed(long seed) { 
  2.     // only allow call from super() constructor 
  3.     if (initialized) 
  4.         throw new UnsupportedOperationException(); 

只要程序中調用了 setSeed() 方法就會拋出 UnsupportedOperationException 異常,如下圖所示:

ThreadLocalRandom 缺點分析

雖然 ThreadLocalRandom 不支持手動設置隨機種子的方法,但并不代表 ThreadLocalRandom 就是完美的,當我們查看 ThreadLocalRandom 初始化隨機種子的方法 initialSeed() 源碼時發現,默認情況下它的隨機種子也是以當前時間有關,源碼如下:

  1. private static long initialSeed() { 
  2.     // 嘗試獲取 JVM 的啟動參數 
  3.     String sec = VM.getSavedProperty("java.util.secureRandomSeed"); 
  4.     // 如果啟動參數設置的值為 true,則參數一個隨機 8 位的種子 
  5.     if (Boolean.parseBoolean(sec)) { 
  6.         byte[] seedBytes = java.security.SecureRandom.getSeed(8); 
  7.         long s = (long)(seedBytes[0]) & 0xffL; 
  8.         for (int i = 1; i < 8; ++i) 
  9.             s = (s << 8) | ((long)(seedBytes[i]) & 0xffL); 
  10.         return s; 
  11.     } 
  12.     // 如果沒有設置啟動參數,則使用當前時間有關的隨機種子算法 
  13.     return (mix64(System.currentTimeMillis()) ^ 
  14.             mix64(System.nanoTime())); 

從上述源碼可以看出,當我們設置了啟動參數“-Djava.util.secureRandomSeed=true”時,ThreadLocalRandom 會產生一個隨機種子,一定程度上能緩解隨機種子相同所帶來隨機數可預測的問題,然而默認情況下如果不設置此參數,那么在多線程中就可以因為啟動時間相同,而導致多個線程在每一步操作中都會生成相同的隨機數。

3.SecureRandom

SecureRandom 繼承自 Random,該類提供加密強隨機數生成器。SecureRandom 不同于 Random,它收集了一些隨機事件,比如鼠標點擊,鍵盤點擊等,SecureRandom 使用這些隨機事件作為種子。這意味著,種子是不可預測的,而不像 Random 默認使用系統當前時間的毫秒數作為種子,從而避免了生成相同隨機數的可能性。

基礎使用

  1. // 創建 SecureRandom 對象,并設置加密算法 
  2. SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); 
  3. for (int i = 0; i < 10; i++) { 
  4.     // 生成 0-9 隨機整數 
  5.     int number = random.nextInt(10); 
  6.     // 打印結果 
  7.     System.out.println("生成隨機數:" + number); 

以上程序的執行結果為:

SecureRandom 默認支持兩種加密算法:

  • SHA1PRNG 算法,提供者 sun.security.provider.SecureRandom;
  • NativePRNG 算法,提供者 sun.security.provider.NativePRNG。

當然除了上述的操作方式之外,你還可以選擇使用 new SecureRandom() 來創建 SecureRandom 對象,實現代碼如下:

  1. SecureRandom secureRandom = new SecureRandom(); 

通過 new 初始化 SecureRandom,默認會使用 NativePRNG 算法來生成隨機數,但是也可以配置 JVM 啟動參數“-Djava.security”參數來修改生成隨機數的算法,或選擇使用 getInstance("算法名稱") 的方式來指定生成隨機數的算法。

4.Math

Math 類誕生于 JDK 1.0,它里面包含了用于執行基本數學運算的屬性和方法,如初等指數、對數、平方根和三角函數,當然它里面也包含了生成隨機數的靜態方法 Math.random() ,此方法會產生一個 0 到 1 的 double 值,如下代碼所示。

① 基礎使用

  1. for (int i = 0; i < 10; i++) { 
  2.     // 產生隨機數 
  3.     double number = Math.random(); 
  4.     System.out.println("生成隨機數:" + number); 

以上程序的執行結果為:

② 擴展

當然如果你想用它來生成一個一定范圍的 int 值也是可以的,你可以這樣寫:

  1. for (int i = 0; i < 10; i++) { 
  2.     // 生成一個從 0-99 的整數 
  3.     int number = (int) (Math.random() * 100); 
  4.     System.out.println("生成隨機數:" + number); 

以上程序的執行結果為:

③ 實現原理

通過分析 Math 的源碼我們可以得知:當第一次調用 Math.random() 方法時,自動創建了一個偽隨機數生成器,實際上用的是 new java.util.Random(),當下一次繼續調用 Math.random() 方法時,就會使用這個新的偽隨機數生成器。

源碼如下:

  1. public static double random() { 
  2.     return RandomNumberGeneratorHolder.randomNumberGenerator.nextDouble(); 
  3.  
  4. private static final class RandomNumberGeneratorHolder { 
  5.     static final Random randomNumberGenerator = new Random(); 

 總結

本文我們介紹了 4 種生成隨機數的方法,其中 Math 是對 Random 的封裝,所以二者比較類似。Random 生成的是偽隨機數,是以當前納秒時間作為種子數的,并且在多線程競爭比較激烈的情況下因為要進行 CAS 操作,所以存在一定的性能問題,但對于絕大數應用場景來說,使用 Random 已經足夠了。當在競爭比較激烈的場景下可以使用 ThreadLocalRandom 來替代 Random,但如果對安全性要求比較高的情況下,可以使用 SecureRandom 來生成隨機數,因為 SecureRandom 會收集一些隨機事件來作為隨機種子,所以 SecureRandom 可以看作是生成真正隨機數的一個工具類。

 

責任編輯:姜華 來源: Java中文社群
相關推薦

2019-12-26 14:07:19

隨機數偽隨機多線程

2024-11-01 15:51:06

2019-09-11 10:09:00

Java虛擬機算法

2010-03-22 19:41:31

2009-12-02 17:01:01

PHP隨機數rand()

2012-03-22 09:31:14

Java

2017-05-29 09:56:25

2010-03-11 12:48:25

Python生成隨機數

2024-05-15 09:09:49

2011-07-08 15:11:03

JAVA

2022-12-15 08:54:28

JAVA性能JDK

2009-06-11 15:16:18

不重復隨機數Java

2015-10-13 10:00:58

Swift隨機數使用總結

2021-12-27 09:31:20

HashtableJava隨機數

2014-07-23 10:07:34

2025-01-17 00:00:00

Java隨機數服務

2023-01-03 07:49:45

Java隨機數線程

2021-06-01 22:31:57

區塊鏈隨機數技術

2024-01-25 11:32:21

2010-10-09 15:35:25

MySQL rand函
點贊
收藏

51CTO技術棧公眾號

成人中心免费视频| 欧美成人全部免费| 99视频免费播放| 黄色软件在线| 狠狠狠色丁香婷婷综合激情| 欧美成人精品在线| 超碰97在线资源站| 精品女同一区二区三区在线观看| 中文字幕欧美一区| 国产伦精品一区| 中文av免费观看| 国内自拍一区| 国产亚洲精品va在线观看| 日本一本在线视频| 97精品国产99久久久久久免费| 亚洲精品视频在线看| 日韩美女一区| 国产小视频免费观看| 久久精品999| 欧美影院久久久| 免费在线观看黄视频| 欧美丝袜激情| 日韩精品福利网站| 下面一进一出好爽视频| av在线日韩| 亚洲国产精品久久人人爱蜜臀| 色一情一乱一伦一区二区三区丨| 欧美熟妇另类久久久久久不卡 | 国产精品日日夜夜| 色天下一区二区三区| 日韩欧美在线不卡| 午夜剧场高清版免费观看 | 韩国一区二区三区在线观看| 少妇高潮久久久久久潘金莲| 大又大又粗又硬又爽少妇毛片| 天堂av一区| 91精品视频网| 超碰人人草人人| 99久久精品一区二区成人| 欧美日韩国产色| 男人添女人荫蒂免费视频| 黄网站在线播放| 国产精品萝li| 亚洲日本欧美在线| 国产h在线观看| 久久久综合视频| 欧美精品123| 爽爽视频在线观看| www.日韩av| 国产一级精品aaaaa看| 欧洲av在线播放| 成人国产在线观看| 国产免费一区二区| 五月激情丁香婷婷| 91亚洲精品久久久蜜桃网站| 国产一区二区三区高清| 日韩在线视频第一页| 波多野结衣中文字幕一区 | 一区二区三区视频在线看| 在线观看成人免费| 污视频免费在线观看| 亚洲精品成人在线| 99久久免费观看| 7777kkk亚洲综合欧美网站| 亚洲国产精品一区二区久久| 黄网站欧美内射| 中文字幕资源网在线观看免费| 欧美性videos高清精品| 成人午夜视频免费在线观看| 欧美国产大片| 欧美日韩国产欧美日美国产精品| 亚洲日本黄色片| 永久免费精品视频| 亚洲精品视频中文字幕| xxxx日本黄色| 性欧美欧美巨大69| 欧美高清无遮挡| 欧美特黄aaaaaa| 蜜桃视频一区二区三区| 亚洲a在线播放| 天天操天天操天天干| 久久久激情视频| 国产免费色视频| 国产精品69xx| 91国在线观看| 欧美在线a视频| 欧美福利在线播放网址导航| 在线播放日韩精品| 国产1区2区3区4区| 亚洲一区二区三区高清| 国产精品视频自在线| 精品国精品国产自在久不卡| 91色.com| 日本一道在线观看| 国偷自产一区二区免费视频| 91精品综合久久久久久| 无码人妻精品一区二区三应用大全| 欧美在线色图| 欧美裸体xxxx极品少妇| 天干夜夜爽爽日日日日| 国产乱人伦偷精品视频免下载| 精品视频一区二区三区四区| 午夜国产福利在线| 疯狂欧美牲乱大交777| 可以看污的网站| 亚洲精品国产setv| 九九热99久久久国产盗摄| 久久青青草原亚洲av无码麻豆 | 完美搭档在线观看| 91日韩在线| 日韩免费视频在线观看| 性色av蜜臀av| 国产精品三级久久久久三级| 三上悠亚久久精品| 国产精品美女久久久久人| 亚洲视频欧洲视频| 国产一级特黄aaa大片| 韩日av一区二区| 欧美日韩中文国产一区发布| 岛国毛片av在线| 91精品国产一区二区三区蜜臀 | 午夜视频在线网站| 国产一区二区三区日韩精品| 午夜精品久久久久久久99黑人| 国产精选久久久| 亚洲国产成人私人影院tom | 色偷偷偷在线视频播放| 精品国产亚洲一区二区三区在线观看| 少妇视频一区二区| 青娱乐精品在线视频| 茄子视频成人在线观看| 在线视频cao| 亚洲精品久久久久久下一站| 精品少妇久久久久久888优播| 国产在线看一区| 影音欧美亚洲| 精品久久在线| 日日噜噜噜夜夜爽亚洲精品| 自拍偷拍色综合| 国产午夜精品美女毛片视频| 女人扒开屁股爽桶30分钟| 国产欧美三级电影| 国模极品一区二区三区| 欧美一区二不卡视频| 亚洲乱码国产乱码精品精98午夜| 欧美成人乱码一二三四区免费| 热久久天天拍国产| 国产精品自产拍在线观看中文| 91网页在线观看| 欧美影视一区二区三区| 亚洲精品成人av久久| 美国十次了思思久久精品导航| 午夜一区二区三区| 久久精品嫩草影院| 精品久久久av| 午夜精品久久久久久久99热黄桃| 一区二区三区成人| 熟妇高潮一区二区| 在线亚洲国产精品网站| 欧美二区三区| julia一区二区三区中文字幕| 色天天综合狠狠色| 国产精品视频a| 亚洲欧美日韩一区二区三区在线观看 | 成人欧美在线| 精品国产乱码久久久久久闺蜜| 日本少妇性生活| 91在线国产福利| 超碰在线人人爱| 999国产精品视频| 99久久国产免费免费| 1区2区3区在线| 国产午夜精品一区二区三区| 亚洲一区中文字幕在线| 一级精品视频在线观看宜春院 | 奇米影音第四色| 欧美有码视频| 欧美久久久久久久| 二区三区精品| 97在线观看视频国产| 成年在线观看免费人视频| 56国语精品自产拍在线观看| 国产无码精品久久久| 国产香蕉久久精品综合网| 亚洲av无日韩毛片久久| 夜夜嗨网站十八久久| 亚洲欧洲国产精品久久| 2020最新国产精品| 国产精品∨欧美精品v日韩精品| 国产原创在线观看| 日韩成人久久久| 国产又粗又长视频| 岛国精品视频在线播放| 久久精品亚洲a| 99久久久无码国产精品| 中文av字幕在线观看| 在线观看不卡| 宅男av一区二区三区| 欧美调教网站| 亚洲va欧美va国产综合剧情| 午夜精品久久久久久久久久蜜桃| 欧美激情va永久在线播放| 超碰免费97在线观看| 亚洲国产精品999| 91丨porny丨在线中文 | 欧美写真视频网站| 国产一级视频在线播放| 国产精品国产自产拍在线| 女同性恋一区二区三区| 国产一区二区0| 国产精品天天av精麻传媒| 亚洲福利久久| 黄色一级视频播放| 久久国产亚洲| 日本一区二区在线视频观看| 国产精品视频3p| 91视频免费在线| 国产精品麻豆成人av电影艾秋| 欧美激情xxxx| av大全在线| 日韩中文字幕免费看| 国产精品毛片一区二区三区四区| 亚洲国产精品久久| 亚洲精品一区二区三区新线路 | 国产极品精品在线观看| 老牛影视精品| 久久欧美在线电影| 视频在线观看入口黄最新永久免费国产 | 一级片免费在线观看视频| 日本亚洲免费观看| 日本三区在线观看| 免费一区视频| 狠狠爱免费视频| 亚洲一区日韩| 国产成人在线免费看| 1000部精品久久久久久久久| 17c丨国产丨精品视频| 欧美1区2区3区| 欧美xxxx吸乳| 午夜精品国产| 成人午夜免费在线视频| 欧美日韩一区二区国产| 97在线免费视频观看| 欧美激情一区| 免费看毛片的网址| 亚洲茄子视频| 日韩欧美国产免费| 久久一区中文字幕| 日本激情视频在线| 麻豆久久一区二区| 在线观看日本www| 国产精品系列在线播放| 无码人妻一区二区三区一| 成人丝袜高跟foot| 久久久国产精品无码| 久久只精品国产| 国产亚洲精品熟女国产成人| 亚洲国产精品成人久久综合一区| 老司机精品免费视频| 亚洲日本va在线观看| 毛片a片免费观看| 午夜激情一区二区| 亚洲精品成人在线视频| 欧美性大战久久| 国产手机精品视频| 精品少妇一区二区三区| 四虎永久在线精品免费网址| 亚洲精品综合精品自拍| 中文日本在线观看| 欧美成人剧情片在线观看| bl在线肉h视频大尺度| 日本欧美国产在线| 成人午夜888| 国产在线资源一区| 精品国产一区二区三区久久久樱花 | 手机av免费在线| 欧美性受xxxx白人性爽| 欧美日韩美女| 999精品视频一区二区三区| 超碰成人免费| 日韩精品国内| 欧美亚韩一区| 三年中国国语在线播放免费| 国产综合色在线视频区| 污污内射在线观看一区二区少妇 | 国产精一品亚洲二区在线视频| 最新版天堂资源在线| 国产日韩欧美麻豆| 精品一区在线观看视频| 欧美性开放视频| 国产精品熟女久久久久久| 亚洲精品久久久久久下一站| 欧美jizzhd欧美| 97成人精品区在线播放| 午夜不卡一区| 免费在线观看一区二区| 亚洲最大av| 亚洲少妇第一页| 成人av一区二区三区| 5566中文字幕| 欧美日韩国产精品一区二区三区四区| 国产精品高潮呻吟av| 亚洲免费高清视频| 污视频网站在线免费| 国产啪精品视频| 日韩a级大片| 青草全福视在线| 麻豆91在线看| www.久久av| 亚洲成av人片一区二区梦乃| 91精品视频免费在线观看 | 国产成人精品日本亚洲11| 欧美手机在线| 久久九九国产视频| 99国产精品视频免费观看| 波多野结衣爱爱视频| 欧美色偷偷大香| 性xxxx搡xxxxx搡欧美| 九九热这里只有精品免费看| 欧美性生活一级| 日韩资源av在线| 亚洲欧美久久久| 精品国产一区在线| 亚洲一区二区三区免费视频| 999久久久久| 久久精品久久久久电影| 黄色成人在线视频| 欧美在线视频一区二区三区| 亚洲视频播放| 国产十八熟妇av成人一区| 亚洲精品高清在线| 精品国产区一区二| 欧美成人一二三| 国产一区二区三区精品在线观看| 亚洲精品一区二区三区樱花| 日韩中文字幕亚洲一区二区va在线 | 国产视频一区二区三区在线播放 | 日韩精品一区三区| 欧美xxx久久| 亚洲综合图区| 国产福利久久精品| 今天的高清视频免费播放成人| 欧美图片自拍偷拍| 亚洲五码中文字幕| 狠狠躁夜夜躁av无码中文幕| 欧美黑人又粗大| 九色丨蝌蚪丨成人| 成人免费毛片网| 久久精品视频一区二区| 羞羞色院91蜜桃| 久久精品视频亚洲| 日韩亚洲精品在线观看| 丁香六月激情婷婷| 成人小视频免费在线观看| 国产成人愉拍精品久久| 日韩精品视频在线| gogo亚洲高清大胆美女人体| 亚洲免费久久| 国产黄色91视频| 日韩免费av片| 亚洲欧美在线播放| 青青青国产精品| 成人短视频在线观看免费| 成人av电影免费在线播放| 六月丁香婷婷综合| 伊人精品在线观看| 国产精品亚洲欧美日韩一区在线 | 免费久久精品视频| 成年人免费视频播放| 日韩欧美电影一二三| 一个人看的www视频在线免费观看| 日韩资源av在线| 国产成人精品免费看| 免费看毛片网站| 日韩视频在线免费观看| 国内精品国产成人国产三级粉色| 黄色片一级视频| 亚洲日本韩国一区| 亚洲人在线观看视频| 国产剧情日韩欧美| 亚洲激情网站| 欧美另类69xxxx| 亚洲第一视频网站| 欧美黄色成人| 激情深爱综合网| 国产精品理论片在线观看| 黄色片一区二区三区| 国产精品高潮呻吟视频 | 黄www在线观看| 亚洲视频1区2区| 完全免费av在线播放| 在线精品一区二区三区| 欧美女孩性生活视频| 深夜成人在线| 麻豆传媒网站在线观看| 久久久综合网站| 日本激情一区二区| 91久久久久久国产精品| 久久国产福利| 欧美日韩中文字幕在线观看|