日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

java基础提升篇:深入浅出Java多线程

發(fā)布時(shí)間:2025/3/20 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java基础提升篇:深入浅出Java多线程 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

初遇

Java給多線程編程提供了內(nèi)置的支持。一個(gè)多線程程序包含兩個(gè)或多個(gè)能并發(fā)運(yùn)行的部分。程序的每一部分都稱作一個(gè)線程,并且每個(gè)線程定義了一個(gè)獨(dú)立的執(zhí)行路徑。

多線程是多任務(wù)的一種特別的形式,但多線程使用了更小的資源開(kāi)銷。

這里定義和線程相關(guān)的另一個(gè)術(shù)語(yǔ) - 進(jìn)程:一個(gè)進(jìn)程包括由操作系統(tǒng)分配的內(nèi)存空間,包含一個(gè)或多個(gè)線程。一個(gè)線程不能獨(dú)立的存在,它必須是進(jìn)程的一部分。一個(gè)進(jìn)程一直運(yùn)行,直到所有的非守候線程都結(jié)束運(yùn)行后才能結(jié)束。

多線程能滿足程序員編寫(xiě)高效率的程序來(lái)達(dá)到充分利用CPU的目的。

1. 多線程基礎(chǔ)概念介紹

進(jìn)程是程序(任務(wù))的執(zhí)行過(guò)程,它持有資源(共享內(nèi)存,共享文件)和線程

分析:

執(zhí)行過(guò)程 是動(dòng)態(tài)性的,你放在電腦磁盤(pán)上的某個(gè)eclipse或者QQ文件并不是我們的進(jìn)程,只有當(dāng)你雙擊運(yùn)行可執(zhí)行文件,使eclipse或者QQ運(yùn)行之后,這才稱為進(jìn)程。它是一個(gè)執(zhí)行過(guò)程,是一個(gè)動(dòng)態(tài)的概念。

它持有資源(共享內(nèi)存,共享文件)和線程:我們說(shuō)進(jìn)程是資源的載體,也是線程的載體。這里的資源可以理解為內(nèi)存。我們知道程序是要從內(nèi)存中讀取數(shù)據(jù)進(jìn)行運(yùn)行的,所以每個(gè)進(jìn)程獲得執(zhí)行的時(shí)候會(huì)被分配一個(gè)內(nèi)存。

③ 線程是什么?

如果我們把進(jìn)程比作一個(gè)班級(jí),那么班級(jí)中的每個(gè)學(xué)生可以將它視作一個(gè)線程。學(xué)生是班級(jí)中的最小單元,構(gòu)成了班級(jí)中的最小單位。一個(gè)班級(jí)有可以多個(gè)學(xué)生,這些學(xué)生都使用共同的桌椅、書(shū)籍以及黑板等等進(jìn)行學(xué)習(xí)和生活。

在這個(gè)意義上我們說(shuō):

線程是系統(tǒng)中最小的執(zhí)行單元;同一進(jìn)程中可以有多個(gè)線程;線程共享進(jìn)程的資源。

④ 線程是如何交互?

就如同一個(gè)班級(jí)中的多個(gè)學(xué)生一樣,我們說(shuō)多個(gè)線程需要通信才能正確的工作,這種通信,我們稱作線程的交互

交互的方式:互斥、同步

類比班級(jí),就是在同一班級(jí)之內(nèi),同學(xué)之間通過(guò)相互的協(xié)作才能完成某些任務(wù),有時(shí)這種協(xié)作是需要競(jìng)爭(zhēng)的,比如學(xué)習(xí),班級(jí)之內(nèi)公共的學(xué)習(xí)資料是有限的,愛(ài)學(xué)習(xí)的同學(xué)需要搶占它,需要競(jìng)爭(zhēng),當(dāng)一個(gè)同學(xué)使用完了之后另一個(gè)同學(xué)才可以使用;如果一個(gè)同學(xué)正在使用,那么其他新來(lái)的同學(xué)只能等待;另一方面需要同步協(xié)作,就好比班級(jí)六一需要排演節(jié)目,同學(xué)需要齊心協(xié)力相互配合才能將節(jié)目演好,這就是進(jìn)程交互。

一個(gè)線程的生命周期

線程經(jīng)過(guò)其生命周期的各個(gè)階段。下圖顯示了一個(gè)線程完整的生命周期。

  • 新建狀態(tài):

使用 new 關(guān)鍵字和 Thread 類或其子類建立一個(gè)線程對(duì)象后,該線程對(duì)象就處于新建狀態(tài)。它保持這個(gè)狀態(tài)直到程序 start() 這個(gè)線程。

  • 就緒狀態(tài):

當(dāng)線程對(duì)象調(diào)用了start()方法之后,該線程就進(jìn)入就緒狀態(tài)。就緒狀態(tài)的線程處于就緒隊(duì)列中,要等待JVM里線程調(diào)度器的調(diào)度。

  • 運(yùn)行狀態(tài):

    如果就緒狀態(tài)的線程獲取 CPU 資源,就可以執(zhí)行 run(),此時(shí)線程便處于運(yùn)行狀態(tài)。處于運(yùn)行狀態(tài)的線程最為復(fù)雜,它可以變?yōu)樽枞麪顟B(tài)、就緒狀態(tài)和死亡狀態(tài)。

  • 阻塞狀態(tài):

如果一個(gè)線程執(zhí)行了sleep(睡眠)、suspend(掛起)等方法,失去所占用資源之后,該線程就從運(yùn)行狀態(tài)進(jìn)入阻塞狀態(tài)。在睡眠時(shí)間已到或獲得設(shè)備資源后可以重新進(jìn)入就緒狀態(tài)。

  • 死亡狀態(tài):

一個(gè)運(yùn)行狀態(tài)的線程完成任務(wù)或者其他終止條件發(fā)生時(shí),該線程就切換到終止?fàn)顟B(tài)。

線程的狀態(tài)轉(zhuǎn)換圖

1、新建狀態(tài)(New):新創(chuàng)建了一個(gè)線程對(duì)象。
2、就緒狀態(tài)(Runnable):線程對(duì)象創(chuàng)建后,其他線程調(diào)用了該對(duì)象的start()方法。該狀態(tài)的線程位于可運(yùn)行線程池中,變得可運(yùn)行,等待獲取CPU的使用權(quán)。
3、運(yùn)行狀態(tài)(Running):就緒狀態(tài)的線程獲取了CPU,執(zhí)行程序代碼。
4、阻塞狀態(tài)(Blocked):阻塞狀態(tài)是線程因?yàn)槟撤N原因放棄CPU使用權(quán),暫時(shí)停止運(yùn)行。直到線程進(jìn)入就緒狀態(tài),才有機(jī)會(huì)轉(zhuǎn)到運(yùn)行狀態(tài)。阻塞的情況分三種:
(一)、等待阻塞:運(yùn)行的線程執(zhí)行wait()方法,JVM會(huì)把該線程放入等待池中。
(二)、同步阻塞:運(yùn)行的線程在獲取對(duì)象的同步鎖時(shí),若該同步鎖被別的線程占用,則JVM會(huì)把該線程放入鎖池中。
(三)、其他阻塞:運(yùn)行的線程執(zhí)行sleep()或join()方法,或者發(fā)出了I/O請(qǐng)求時(shí),JVM會(huì)把該線程置為阻塞狀態(tài)。當(dāng)sleep()狀態(tài)超時(shí)、join()等待線程終止或者超時(shí)、或者I/O處理完畢時(shí),線程重新轉(zhuǎn)入就緒狀態(tài)。
5、死亡狀態(tài)(Dead):線程執(zhí)行完了或者因異常退出了run()方法,該線程結(jié)束生命周期。

線程的調(diào)度

1、調(diào)整線程優(yōu)先級(jí):

每一個(gè)Java線程都有一個(gè)優(yōu)先級(jí),這樣有助于操作系統(tǒng)確定線程的調(diào)度順序。

Java線程的優(yōu)先級(jí)用整數(shù)表示,取值范圍是1~10,Thread類有以下三個(gè)靜態(tài)常量:
static int MAX_PRIORITY
線程可以具有的最高優(yōu)先級(jí),取值為10。
static int MIN_PRIORITY
線程可以具有的最低優(yōu)先級(jí),取值為1。
static int NORM_PRIORITY
分配給線程的默認(rèn)優(yōu)先級(jí),取值為5。

Thread類的setPriority()和getPriority()方法分別用來(lái)設(shè)置和獲取線程的優(yōu)先級(jí)。
每個(gè)線程都有默認(rèn)的優(yōu)先級(jí)。主線程的默認(rèn)優(yōu)先級(jí)為T(mén)hread.NORM_PRIORITY。
線程的優(yōu)先級(jí)有繼承關(guān)系,比如A線程中創(chuàng)建了B線程,那么B將和A具有相同的優(yōu)先級(jí)。
JVM提供了10個(gè)線程優(yōu)先級(jí),但與常見(jiàn)的操作系統(tǒng)都不能很好的映射。如果希望程序能移植到各個(gè)操作系統(tǒng)中,應(yīng)該僅僅使用Thread類有以下三個(gè)靜態(tài)常量作為優(yōu)先級(jí),這樣能保證同樣的優(yōu)先級(jí)采用了同樣的調(diào)度方式。

具有較高優(yōu)先級(jí)的線程對(duì)程序更重要,并且應(yīng)該在低優(yōu)先級(jí)的線程之前分配處理器資源。但是,線程優(yōu)先級(jí)不能保證線程執(zhí)行的順序,而且非常依賴于平臺(tái)。

2、線程睡眠:Thread.sleep(long millis)方法,使線程轉(zhuǎn)到阻塞狀態(tài)。millis參數(shù)設(shè)定睡眠的時(shí)間,以毫秒為單位。當(dāng)睡眠結(jié)束后,就轉(zhuǎn)為就緒(Runnable)狀態(tài)。sleep()平臺(tái)移植性好。

3、線程等待:Object類中的wait()方法,導(dǎo)致當(dāng)前的線程等待,直到其他線程調(diào)用此對(duì)象的 notify() 方法或 notifyAll() 喚醒方法。這個(gè)兩個(gè)喚醒方法也是Object類中的方法,行為等價(jià)于調(diào)用 wait(0) 一樣。

4、線程讓步:Thread.yield() 方法,暫停當(dāng)前正在執(zhí)行的線程對(duì)象,把執(zhí)行機(jī)會(huì)讓給相同或者更高優(yōu)先級(jí)的線程。

5、線程加入:join()方法,等待其他線程終止。在當(dāng)前線程中調(diào)用另一個(gè)線程的join()方法,則當(dāng)前線程轉(zhuǎn)入阻塞狀態(tài),直到另一個(gè)進(jìn)程運(yùn)行結(jié)束,當(dāng)前線程再由阻塞轉(zhuǎn)為就緒狀態(tài)。

6、線程喚醒:Object類中的notify()方法,喚醒在此對(duì)象監(jiān)視器上等待的單個(gè)線程。如果所有線程都在此對(duì)象上等待,則會(huì)選擇喚醒其中一個(gè)線程。選擇是任意性的,并在對(duì)實(shí)現(xiàn)做出決定時(shí)發(fā)生。線程通過(guò)調(diào)用其中一個(gè) wait 方法,在對(duì)象的監(jiān)視器上等待。 直到當(dāng)前的線程放棄此對(duì)象上的鎖定,才能繼續(xù)執(zhí)行被喚醒的線程。被喚醒的線程將以常規(guī)方式與在該對(duì)象上主動(dòng)同步的其他所有線程進(jìn)行競(jìng)爭(zhēng);例如,喚醒的線程在作為鎖定此對(duì)象的下一個(gè)線程方面沒(méi)有可靠的特權(quán)或劣勢(shì)。類似的方法還有一個(gè)notifyAll(),喚醒在此對(duì)象監(jiān)視器上等待的所有線程。

注意:Thread中suspend()和resume()兩個(gè)方法在JDK1.5中已經(jīng)廢除,不再介紹。因?yàn)橛兴梨i傾向。

7、常見(jiàn)線程名詞解釋
主線程:JVM調(diào)用程序main()所產(chǎn)生的線程。
當(dāng)前線程:這個(gè)是容易混淆的概念。一般指通過(guò)Thread.currentThread()來(lái)獲取的進(jìn)程。
后臺(tái)線程:指為其他線程提供服務(wù)的線程,也稱為守護(hù)線程。JVM的垃圾回收線程就是一個(gè)后臺(tái)線程。
前臺(tái)線程:是指接受后臺(tái)線程服務(wù)的線程,其實(shí)前臺(tái)后臺(tái)線程是聯(lián)系在一起,就像傀儡和幕后操縱者一樣的關(guān)系。傀儡是前臺(tái)線程、幕后操縱者是后臺(tái)線程。由前臺(tái)線程創(chuàng)建的線程默認(rèn)也是前臺(tái)線程。可以通過(guò)isDaemon()和setDaemon()方法來(lái)判斷和設(shè)置一個(gè)線程是否為后臺(tái)線程。

一些常見(jiàn)問(wèn)題

1、線程的名字,一個(gè)運(yùn)行中的線程總是有名字的,名字有兩個(gè)來(lái)源,一個(gè)是虛擬機(jī)自己給的名字,一個(gè)是你自己的定的名字。在沒(méi)有指定線程名字的情況下,虛擬機(jī)總會(huì)為線程指定名字,并且主線程的名字總是main,非主線程的名字不確定。
2、線程都可以設(shè)置名字,也可以獲取線程的名字,連主線程也不例外。
3、獲取當(dāng)前線程的對(duì)象的方法是:Thread.currentThread();
4、每個(gè)線程都將啟動(dòng),每個(gè)線程都將運(yùn)行直到完成。一系列線程以某種順序啟動(dòng)并不意味著將按該順序執(zhí)行。對(duì)于任何一組啟動(dòng)的線程來(lái)說(shuō),調(diào)度程序不能保證其執(zhí)行次序,持續(xù)時(shí)間也無(wú)法保證。
5、當(dāng)線程目標(biāo)run()方法結(jié)束時(shí)該線程完成。
6、一旦線程啟動(dòng),它就永遠(yuǎn)不能再重新啟動(dòng)。只有一個(gè)新的線程可以被啟動(dòng),并且只能一次。一個(gè)可運(yùn)行的線程或死線程可以被重新啟動(dòng)。
7、線程的調(diào)度是JVM的一部分,在一個(gè)CPU的機(jī)器上上,實(shí)際上一次只能運(yùn)行一個(gè)線程。一次只有一個(gè)線程棧執(zhí)行。JVM線程調(diào)度程序決定實(shí)際運(yùn)行哪個(gè)處于可運(yùn)行狀態(tài)的線程。
眾多可運(yùn)行線程中的某一個(gè)會(huì)被選中做為當(dāng)前線程。可運(yùn)行線程被選擇運(yùn)行的順序是沒(méi)有保障的。
8、盡管通常采用隊(duì)列形式,但這是沒(méi)有保障的。隊(duì)列形式是指當(dāng)一個(gè)線程完成“一輪”時(shí),它移到可運(yùn)行隊(duì)列的尾部等待,直到它最終排隊(duì)到該隊(duì)列的前端為止,它才能被再次選中。事實(shí)上,我們把它稱為可運(yùn)行池而不是一個(gè)可運(yùn)行隊(duì)列,目的是幫助認(rèn)識(shí)線程并不都是以某種有保障的順序排列唱呢個(gè)一個(gè)隊(duì)列的事實(shí)。
9、盡管我們沒(méi)有無(wú)法控制線程調(diào)度程序,但可以通過(guò)別的方式來(lái)影響線程調(diào)度的方式。

2. Java 中線程的常用方法介紹

Java語(yǔ)言對(duì)線程的支持

主要體現(xiàn)在Thread類Runnable接口上,都繼承于java.lang包。它們都有個(gè)共同的方法:public void run()。

run方法為我們提供了線程實(shí)際工作執(zhí)行的代碼。

下表列出了Thread類的一些重要方法:

序號(hào)方法描述
1public void start()使該線程開(kāi)始執(zhí)行;Java 虛擬機(jī)調(diào)用該線程的 run 方法。
2public void run()如果該線程是使用獨(dú)立的 Runnable 運(yùn)行對(duì)象構(gòu)造的,則調(diào)用該 Runnable 對(duì)象的 run 方法;否則,該方法不執(zhí)行任何操作并返回。
3public final void setName(String name)改變線程名稱,使之與參數(shù) name 相同。
4public final void setPriority(int priority)更改線程的優(yōu)先級(jí)。
5public final void setDaemon(boolean on)將該線程標(biāo)記為守護(hù)線程或用戶線程。
6public final void join(long millisec)等待該線程終止的時(shí)間最長(zhǎng)為 millis 毫秒。
7public void interrupt()中斷線程。
8public final boolean isAlive()測(cè)試線程是否處于活動(dòng)狀態(tài)。

測(cè)試線程是否處于活動(dòng)狀態(tài)。 上述方法是被Thread對(duì)象調(diào)用的。下面的方法是Thread類的靜態(tài)方法。

序號(hào)方法描述
1public static void yield()暫停當(dāng)前正在執(zhí)行的線程對(duì)象,并執(zhí)行其他線程。
2public static void sleep(long millisec)在指定的毫秒數(shù)內(nèi)讓當(dāng)前正在執(zhí)行的線程休眠(暫停執(zhí)行),此操作受到系統(tǒng)計(jì)時(shí)器和調(diào)度程序精度和準(zhǔn)確性的影響。
3public static boolean holdsLock(Object x)當(dāng)且僅當(dāng)當(dāng)前線程在指定的對(duì)象上保持監(jiān)視器鎖時(shí),才返回 true。
4public static Thread currentThread()返回對(duì)當(dāng)前正在執(zhí)行的線程對(duì)象的引用。
5public static void dumpStack()將當(dāng)前線程的堆棧跟蹤打印至標(biāo)準(zhǔn)錯(cuò)誤流。

Thread常用的方法

3. 線程初體驗(yàn)(編碼示例)

創(chuàng)建線程的方法有兩種:

1.繼承Thread類本身

2.實(shí)現(xiàn)Runnable接口

線程中的方法比較有特點(diǎn),比如:啟動(dòng)(start),休眠(sleep),停止等,多個(gè)線程是交互執(zhí)行的(cpu在某個(gè)時(shí)刻。只能執(zhí)行一個(gè)線程,當(dāng)一個(gè)線程休眠了或者執(zhí)行完畢了,另一個(gè)線程才能占用cpu來(lái)執(zhí)行)因?yàn)檫@是cpu的結(jié)構(gòu)來(lái)決定的,在某個(gè)時(shí)刻cpu只能執(zhí)行一個(gè)線程,不過(guò)速度相當(dāng)快,對(duì)于人來(lái)將可以認(rèn)為是并行執(zhí)行的。

在一個(gè)java文件中,可以有多個(gè)類(此處說(shuō)的是外部類),但只能有一個(gè)public類。

這兩種創(chuàng)建線程的方法本質(zhì)沒(méi)有任何的不同,一個(gè)是實(shí)現(xiàn)Runnable接口,一個(gè)是繼承Thread類。

使用實(shí)現(xiàn)Runnable接口這種方法:

1.可以避免java的單繼承的特性帶來(lái)的局限性;

2.適合多個(gè)相同程序的代碼去處理同一個(gè)資源情況,把線程同程序的代碼及數(shù)據(jù)有效的分離,較好的體現(xiàn)了面向?qū)ο蟮脑O(shè)計(jì)思想。開(kāi)發(fā)中大多數(shù)情況下都使用實(shí)現(xiàn)Runnable接口這種方法創(chuàng)建線程。

實(shí)現(xiàn)Runnable接口創(chuàng)建的線程最終還是要通過(guò)將自身實(shí)例作為參數(shù)傳遞給Thread然后執(zhí)行

語(yǔ)法: Thread actress=new Thread(Runnable target ,String name);

例如:

Thread actressThread=new Thread(new Actress(),"Ms.runnable"); actressThread.start();

代碼示例:

package com.study.thread;public class Actor extends Thread{public void run() {System.out.println(getName() + "是一個(gè)演員!");int count = 0;boolean keepRunning = true;while(keepRunning){System.out.println(getName()+"登臺(tái)演出:"+ (++count));if(count == 100){keepRunning = false;}if(count%10== 0){try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}System.out.println(getName() + "的演出結(jié)束了!");}public static void main(String[] args) {Thread actor = new Actor();//向上轉(zhuǎn)型:子類轉(zhuǎn)型為父類,子類對(duì)象就會(huì)遺失和父類不同的方法。向上轉(zhuǎn)型符合Java提倡的面向抽象編程思想,還可以減輕編程工作量actor.setName("Mr. Thread");actor.start();//調(diào)用Thread的構(gòu)造函數(shù)Thread(Runnable target, String name)Thread actressThread = new Thread(new Actress(), "Ms. Runnable");actressThread.start();}} //注意:在“xx.java”文件中可以有多個(gè)類,但是只能有一個(gè)Public類。這里所說(shuō)的不是內(nèi)部類,都是一個(gè)個(gè)獨(dú)立的外部類 class Actress implements Runnable{@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + "是一個(gè)演員!");//Runnable沒(méi)有g(shù)etName()方法,需要通過(guò)線程的currentThread()方法獲得線程名稱int count = 0;boolean keepRunning = true;while(keepRunning){System.out.println(Thread.currentThread().getName()+"登臺(tái)演出:"+ (++count));if(count == 100){keepRunning = false;}if(count%10== 0){try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}System.out.println(Thread.currentThread().getName() + "的演出結(jié)束了!");}}/***運(yùn)行結(jié)果Mr. Thread線程和Ms. Runnable線程是交替執(zhí)行的情況*分析:計(jì)算機(jī)CPU處理器在同一時(shí)間同一個(gè)處理器同一個(gè)核只能運(yùn)行一條線程,*當(dāng)一條線程休眠之后,另外一個(gè)線程才獲得處理器時(shí)間*/

運(yùn)行結(jié)果:

示例2:

ArmyRunnable 類:

package com.study.threadTest1;/*** 軍隊(duì)線程* 模擬作戰(zhàn)雙方的行為*/ public class ArmyRunnable implements Runnable {/* volatile關(guān)鍵字* volatile保證了線程可以正確的讀取其他線程寫(xiě)入的值* 如果不寫(xiě)成volatile,由于可見(jiàn)性的問(wèn)題,當(dāng)前線程有可能不能讀到這個(gè)值* 關(guān)于可見(jiàn)性的問(wèn)題可以參考JMM(Java內(nèi)存模型),里面講述了:happens-before原則、可見(jiàn)性* 用volatile修飾的變量,線程在每次使用變量的時(shí)候,都會(huì)讀取變量修改后的值*/volatile boolean keepRunning = true;@Overridepublic void run() {while (keepRunning) {//發(fā)動(dòng)5連擊for(int i=0;i<5;i++){System.out.println(Thread.currentThread().getName()+"進(jìn)攻對(duì)方["+i+"]");//讓出了處理器時(shí)間,下次該誰(shuí)進(jìn)攻還不一定呢!Thread.yield();//yield()當(dāng)前運(yùn)行線程釋放處理器資源} }System.out.println(Thread.currentThread().getName()+"結(jié)束了戰(zhàn)斗!");}}

KeyPersonThread 類:

package com.study.threadTest1;public class KeyPersonThread extends Thread {public void run(){System.out.println(Thread.currentThread().getName()+"開(kāi)始了戰(zhàn)斗!");for(int i=0;i<10;i++){System.out.println(Thread.currentThread().getName()+"左突右殺,攻擊隋軍...");}System.out.println(Thread.currentThread().getName()+"結(jié)束了戰(zhàn)斗!");}}

Stage 類:

package com.study.threadTest1;/*** 隋唐演義大戲舞臺(tái) 6 */ public class Stage extends Thread {public void run(){System.out.println("歡迎觀看隋唐演義");//讓觀眾們安靜片刻,等待大戲上演try {Thread.sleep(5000);} catch (InterruptedException e1) {e1.printStackTrace();}System.out.println("大幕徐徐拉開(kāi)");try {Thread.sleep(5000);} catch (InterruptedException e1) {e1.printStackTrace();}System.out.println("話說(shuō)隋朝末年,隋軍與農(nóng)民起義軍殺得昏天黑地...");ArmyRunnable armyTaskOfSuiDynasty = new ArmyRunnable();ArmyRunnable armyTaskOfRevolt = new ArmyRunnable();//使用Runnable接口創(chuàng)建線程Thread armyOfSuiDynasty = new Thread(armyTaskOfSuiDynasty,"隋軍");Thread armyOfRevolt = new Thread(armyTaskOfRevolt,"農(nóng)民起義軍");//啟動(dòng)線程,讓軍隊(duì)開(kāi)始作戰(zhàn)armyOfSuiDynasty.start();armyOfRevolt.start();//舞臺(tái)線程休眠,大家專心觀看軍隊(duì)廝殺try {Thread.sleep(50);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("正當(dāng)雙方激戰(zhàn)正酣,半路殺出了個(gè)程咬金");Thread mrCheng = new KeyPersonThread();mrCheng.setName("程咬金");System.out.println("程咬金的理想就是結(jié)束戰(zhàn)爭(zhēng),使百姓安居樂(lè)業(yè)!");//停止軍隊(duì)作戰(zhàn)//停止線程的方法armyTaskOfSuiDynasty.keepRunning = false;armyTaskOfRevolt.keepRunning = false;try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}/** 歷史大戲留給關(guān)鍵人物*/mrCheng.start();//萬(wàn)眾矚目,所有線程等待程先生完成歷史使命try {mrCheng.join();//join()使其他線程等待當(dāng)前線程終止} catch (InterruptedException e) {e.printStackTrace();}System.out.println("戰(zhàn)爭(zhēng)結(jié)束,人民安居樂(lè)業(yè),程先生實(shí)現(xiàn)了積極的人生夢(mèng)想,為人民作出了貢獻(xiàn)!");System.out.println("謝謝觀看隋唐演義,再見(jiàn)!");}public static void main(String[] args) {new Stage().start();}}

運(yùn)行結(jié)果:

4. Java 線程的正確停止

如何正確的停止Java中的線程?

stop方法:該方法使線程戛然而止(突然停止),完成了哪些工作,哪些工作還沒(méi)有做都不清楚,且清理工作也沒(méi)有做。

stop方法不是正確的停止線程方法。線程停止不推薦使用stop方法。

正確的方法—設(shè)置退出標(biāo)志

使用volatile 定義boolean running=true,通過(guò)設(shè)置標(biāo)志變量running,來(lái)結(jié)束線程。

如本文:volatile boolean keepRunning=true;

這樣做的好處是:使得線程有機(jī)會(huì)使得一個(gè)完整的業(yè)務(wù)步驟被完整地執(zhí)行,在執(zhí)行完業(yè)務(wù)步驟后有充分的時(shí)間去做代碼的清理工作,使得線程代碼在實(shí)際中更安全。

廣為流傳的錯(cuò)誤方法—interrupt方法


當(dāng)一個(gè)線程運(yùn)行時(shí),另一個(gè)線程可以調(diào)用對(duì)應(yīng)的 Thread 對(duì)象的 interrupt()方法來(lái)中斷它,該方法只是在目標(biāo)線程中設(shè)置一個(gè)標(biāo)志,表示它已經(jīng)被中斷,并立即返回。這里需要注意的是,如果只是單純的調(diào)用 interrupt()方法,線程并沒(méi)有實(shí)際被中斷,會(huì)繼續(xù)往下執(zhí)行。

代碼示例:

package com.study.threadStop;/*** 錯(cuò)誤終止進(jìn)程的方式——interrupt*/ public class WrongWayStopThread extends Thread {public static void main(String[] args) {WrongWayStopThread thread = new WrongWayStopThread();System.out.println("Start Thread...");thread.start();try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("Interrupting thread...");thread.interrupt();try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("Stopping application...");}public void run() {while(true){System.out.println("Thread is running...");long time = System.currentTimeMillis();while ((System.currentTimeMillis()-time) <1000) {//這部分的作用大致相當(dāng)于Thread.sleep(1000),注意此處為什么沒(méi)有使用休眠的方法//減少屏幕輸出的空循環(huán)(使得每秒鐘只輸出一行信息)}}} }

運(yùn)行結(jié)果:

由結(jié)果看到interrupt()方法并沒(méi)有使線程中斷,線程還是會(huì)繼續(xù)往下執(zhí)行。

Java API中介紹:

但是interrupt()方法可以使我們的中斷狀態(tài)發(fā)生改變,可以調(diào)用isInterrupted 方法

將上處run方法代碼改為下面一樣,程序就可以正常結(jié)束了。

public void run() {while(!this.isInterrupted()){//interrupt()可以使中斷狀態(tài)放生改變,調(diào)用isInterrupted()System.out.println("Thread is running...");long time = System.currentTimeMillis();while ((System.currentTimeMillis()-time) <1000) {//這部分的作用大致相當(dāng)于Thread.sleep(1000),注意此處為什么沒(méi)有使用休眠的方法//減少屏幕輸出的空循環(huán)(使得每秒鐘只輸出一行信息)}}}

但是這種所使用的退出方法實(shí)質(zhì)上還是前面說(shuō)的使用退出旗標(biāo)的方法,不過(guò)這里所使用的退出旗標(biāo)是一個(gè)特殊的標(biāo)志“線程是否被中斷的狀態(tài)”。

這部分代碼相當(dāng)于線程休眠1秒鐘的代碼。但是為什么沒(méi)有使用Thread.sleep(1000)。如果采用這種方法就會(huì)出現(xiàn)

線程沒(méi)有正常結(jié)束,而且還拋出了一個(gè)異常,異常拋出位置在調(diào)用interrupt方法之后。為什么會(huì)有這種結(jié)果?

在API文檔中說(shuō)過(guò):如果線程由于調(diào)用的某些方法(比如sleep,join。。。)而進(jìn)入一種阻塞狀態(tài)時(shí),此時(shí)如果這個(gè)線程再被調(diào)用interrupt方法,它會(huì)產(chǎn)生兩個(gè)結(jié)果:第一,它的中斷狀態(tài)被清除clear,而不是被設(shè)置set。那isInterrupted 就不能返回是否被中斷的正確狀態(tài),那while函數(shù)就不能正確的退出。第二,sleep方法會(huì)收到InterruptedException被中斷。

interrupt()方法只能設(shè)置interrupt標(biāo)志位(且在線程阻塞情況下,標(biāo)志位會(huì)被清除,更無(wú)法設(shè)置中斷標(biāo)志位),無(wú)法停止線程

5. 線程交互

爭(zhēng)用條件:

1、當(dāng)多個(gè)線程同時(shí)共享訪問(wèn)同一數(shù)據(jù)(內(nèi)存區(qū)域)時(shí),每個(gè)線程都嘗試操作該數(shù)據(jù),從而導(dǎo)致數(shù)據(jù)被破壞(corrupted),這種現(xiàn)象稱為爭(zhēng)用條件

2、原因是,每個(gè)線程在操作數(shù)據(jù)時(shí),會(huì)先將數(shù)據(jù)初值讀【取到自己獲得的內(nèi)存中】,然后在內(nèi)存中進(jìn)行運(yùn)算后,重新賦值到數(shù)據(jù)。

3、爭(zhēng)用條件:線程1在還【未重新將值賦回去時(shí)】,線程1阻塞,線程2開(kāi)始訪問(wèn)該數(shù)據(jù),然后進(jìn)行了修改,之后被阻塞的線程1再獲得資源,而將之前計(jì)算的值覆蓋掉線程2所修改的值,就出現(xiàn)了數(shù)據(jù)丟失情況。

互斥與同步:守恒的能量

1、線程的特點(diǎn),共享同一進(jìn)程的資源,同一時(shí)刻只能有一個(gè)線程占用CPU

2、由于線程有如上的特點(diǎn),所以就會(huì)存在多個(gè)線程爭(zhēng)搶資源的現(xiàn)象,就會(huì)存在爭(zhēng)用條件這種現(xiàn)象

3、為了讓線程能夠正確的運(yùn)行,不破壞共享的數(shù)據(jù),所以,就產(chǎn)生了同步和互斥的兩種線程運(yùn)行的機(jī)制

4、線程的互斥(加鎖實(shí)現(xiàn)):線程的運(yùn)行隔離開(kāi)來(lái),互不影響,使用synchronized關(guān)鍵字實(shí)現(xiàn)互斥行為,此關(guān)鍵字即可以出現(xiàn)在方法體之上也可以出現(xiàn)在方法體內(nèi),以一種塊的形式出現(xiàn),在此代碼塊中有線程的等待和喚醒動(dòng)作,用于支持線程的同步控制

5、線程的同步(線程的等待和喚醒:wait()+notifyAll()):線程的運(yùn)行有相互的通信控制,運(yùn)行完一個(gè)再正確的運(yùn)行另一個(gè)

6、鎖的概念:比如private final Object lockObj=new Object();

7、互斥實(shí)現(xiàn)方式:synchronized關(guān)鍵字

synchronized(lockObj){—執(zhí)行代碼----}加鎖操作

lockObj.wait();線程進(jìn)入等待狀態(tài),以避免線程持續(xù)申請(qǐng)鎖,而不去競(jìng)爭(zhēng)cpu資源

lockObj.notifyAll();喚醒所有l(wèi)ockObj對(duì)象上等待的線程

8、加鎖操作會(huì)開(kāi)銷系統(tǒng)資源,降低效率

同步問(wèn)題提出

線程的同步是為了防止多個(gè)線程訪問(wèn)一個(gè)數(shù)據(jù)對(duì)象時(shí),對(duì)數(shù)據(jù)造成的破壞。
例如:兩個(gè)線程ThreadA、ThreadB都操作同一個(gè)對(duì)象Foo對(duì)象,并修改Foo對(duì)象上的數(shù)據(jù)。

public class Foo { private int x = 100; public int getX() { return x; } public int fix(int y) { x = x - y; return x; } } public class MyRunnable implements Runnable { private Foo foo = new Foo(); public static void main(String[] args) { MyRunnable r = new MyRunnable(); Thread ta = new Thread(r, "Thread-A"); Thread tb = new Thread(r, "Thread-B"); ta.start(); tb.start(); } public void run() { for (int i = 0; i < 3; i++) { this.fix(30); try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + " : 當(dāng)前foo對(duì)象的x值= " + foo.getX()); } } public int fix(int y) { return foo.fix(y); } }

運(yùn)行結(jié)果:

Thread-A : 當(dāng)前foo對(duì)象的x值= 40 Thread-B : 當(dāng)前foo對(duì)象的x值= 40 Thread-B : 當(dāng)前foo對(duì)象的x值= -20 Thread-A : 當(dāng)前foo對(duì)象的x值= -50 Thread-A : 當(dāng)前foo對(duì)象的x值= -80 Thread-B : 當(dāng)前foo對(duì)象的x值= -80 Process finished with exit code 0

從結(jié)果發(fā)現(xiàn),這樣的輸出值明顯是不合理的。原因是兩個(gè)線程不加控制的訪問(wèn)Foo對(duì)象并修改其數(shù)據(jù)所致。

如果要保持結(jié)果的合理性,只需要達(dá)到一個(gè)目的,就是將對(duì)Foo的訪問(wèn)加以限制,每次只能有一個(gè)線程在訪問(wèn)。這樣就能保證Foo對(duì)象中數(shù)據(jù)的合理性了。

在具體的Java代碼中需要完成一下兩個(gè)操作:
把競(jìng)爭(zhēng)訪問(wèn)的資源類Foo變量x標(biāo)識(shí)為private;
同步哪些修改變量的代碼,使用synchronized關(guān)鍵字同步方法或代碼。

同步和鎖定

1、鎖的原理

Java中每個(gè)對(duì)象都有一個(gè)內(nèi)置鎖
當(dāng)程序運(yùn)行到非靜態(tài)的synchronized同步方法上時(shí),自動(dòng)獲得與正在執(zhí)行代碼類的當(dāng)前實(shí)例(this實(shí)例)有關(guān)的鎖。獲得一個(gè)對(duì)象的鎖也稱為獲取鎖、鎖定對(duì)象、在對(duì)象上鎖定或在對(duì)象上同步。
當(dāng)程序運(yùn)行到synchronized同步方法或代碼塊時(shí)才該對(duì)象鎖才起作用。
一個(gè)對(duì)象只有一個(gè)鎖。所以,如果一個(gè)線程獲得該鎖,就沒(méi)有其他線程可以獲得鎖,直到第一個(gè)線程釋放(或返回)鎖。這也意味著任何其他線程都不能進(jìn)入該對(duì)象上的synchronized方法或代碼塊,直到該鎖被釋放。
釋放鎖是指持鎖線程退出了synchronized同步方法或代碼塊。

關(guān)于鎖和同步,有一下幾個(gè)要點(diǎn):
1)、只能同步方法,而不能同步變量和類;
2)、每個(gè)對(duì)象只有一個(gè)鎖;當(dāng)提到同步時(shí),應(yīng)該清楚在什么上同步?也就是說(shuō),在哪個(gè)對(duì)象上同步?
3)、不必同步類中所有的方法,類可以同時(shí)擁有同步和非同步方法。
4)、如果兩個(gè)線程要執(zhí)行一個(gè)類中的synchronized方法,并且兩個(gè)線程使用相同的實(shí)例來(lái)調(diào)用方法,那么一次只能有一個(gè)線程能夠執(zhí)行方法,另一個(gè)需要等待,直到鎖被釋放。也就是說(shuō):如果一個(gè)線程在對(duì)象上獲得一個(gè)鎖,就沒(méi)有任何其他線程可以進(jìn)入(該對(duì)象的)類中的任何一個(gè)同步方法。
5)、如果線程擁有同步和非同步方法,則非同步方法可以被多個(gè)線程自由訪問(wèn)而不受鎖的限制。

6)、線程睡眠時(shí),它所持的任何鎖都不會(huì)釋放。
7)、線程可以獲得多個(gè)鎖。比如,在一個(gè)對(duì)象的同步方法里面調(diào)用另外一個(gè)對(duì)象的同步方法,則獲取了兩個(gè)對(duì)象的同步鎖。
8)、同步損害并發(fā)性,應(yīng)該盡可能縮小同步范圍。同步不但可以同步整個(gè)方法,還可以同步方法中一部分代碼塊。
9)、在使用同步代碼塊時(shí)候,應(yīng)該指定在哪個(gè)對(duì)象上同步,也就是說(shuō)要獲取哪個(gè)對(duì)象的鎖。例如:

public int fix(int y) {synchronized (this) {x = x - y;}return x;}

當(dāng)然,同步方法也可以改寫(xiě)為非同步方法,但功能完全一樣的,例如:

public synchronized int getX() {return x++;}

public int getX() {synchronized (this) {return x;}}

效果是完全一樣的。

靜態(tài)方法同步

要同步靜態(tài)方法,需要一個(gè)用于整個(gè)類對(duì)象的鎖,這個(gè)對(duì)象是就是這個(gè)類(XXX.class)。
例如:

public static synchronized int setName(String name){Xxx.name = name; }

等價(jià)于

public static int setName(String name){synchronized(Xxx.class){Xxx.name = name;} }

線程同步小結(jié)

1、線程同步的目的是為了保護(hù)多個(gè)線程訪問(wèn)一個(gè)資源時(shí)對(duì)資源的破壞。
2、線程同步方法是通過(guò)鎖來(lái)實(shí)現(xiàn),每個(gè)對(duì)象都有切僅有一個(gè)鎖,這個(gè)鎖與一個(gè)特定的對(duì)象關(guān)聯(lián),線程一旦獲取了對(duì)象鎖,其他訪問(wèn)該對(duì)象的線程就無(wú)法再訪問(wèn)該對(duì)象的其他同步方法。
3、對(duì)于靜態(tài)同步方法,鎖是針對(duì)這個(gè)類的,鎖對(duì)象是該類的Class對(duì)象。靜態(tài)和非靜態(tài)方法的鎖互不干預(yù)。一個(gè)線程獲得鎖,當(dāng)在一個(gè)同步方法中訪問(wèn)另外對(duì)象上的同步方法時(shí),會(huì)獲取這兩個(gè)對(duì)象鎖。
4、對(duì)于同步,要時(shí)刻清醒在哪個(gè)對(duì)象上同步,這是關(guān)鍵。
5、編寫(xiě)線程安全的類,需要時(shí)刻注意對(duì)多個(gè)線程競(jìng)爭(zhēng)訪問(wèn)資源的邏輯和安全做出正確的判斷,對(duì)“原子”操作做出分析,并保證原子操作期間別的線程無(wú)法訪問(wèn)競(jìng)爭(zhēng)資源。
6、當(dāng)多個(gè)線程等待一個(gè)對(duì)象鎖時(shí),沒(méi)有獲取到鎖的線程將發(fā)生阻塞。
7、死鎖是線程間相互等待鎖鎖造成的,在實(shí)際中發(fā)生的概率非常的小。真讓你寫(xiě)個(gè)死鎖程序,不一定好使,呵呵。但是,一旦程序發(fā)生死鎖,程序?qū)⑺赖簟?/p>

深入剖析互斥與同步

互斥的實(shí)現(xiàn)(加鎖):synchronized(lockObj); 保證的同一時(shí)間,只有一個(gè)線程獲得lockObj.

同步的實(shí)現(xiàn):wait()/notify()/notifyAll()

**注意:**wait()、notify()、notifyAll()方法均屬于Object對(duì)象,而不是Thread對(duì)象。

  • void notify()
    喚醒在此對(duì)象監(jiān)視器上等待的單個(gè)線程。
  • void notifyAll()
    喚醒在此對(duì)象監(jiān)視器上等待的所有線程。
  • void wait()
    導(dǎo)致當(dāng)前的線程等待,直到其他線程調(diào)用此對(duì)象的 notify() 方法或 notifyAll() 方法。

當(dāng)然,wait()還有另外兩個(gè)重載方法:

  • void wait(long timeout)
    導(dǎo)致當(dāng)前的線程等待,直到其他線程調(diào)用此對(duì)象的 notify() 方法或 notifyAll() 方法,或者超過(guò)指定的時(shí)間量。
  • void wait(long timeout, int nanos)
    導(dǎo)致當(dāng)前的線程等待,直到其他線程調(diào)用此對(duì)象的 notify() 方法或 notifyAll() 方法,或者其他某個(gè)線程中斷當(dāng)前線程,或者已超過(guò)某個(gè)實(shí)際時(shí)間量。

notify()喚醒wait set中的一條線程,而notifyall()喚醒所有線程。

同步是兩個(gè)線程之間的一種交互的操作(一個(gè)線程發(fā)出消息另外一個(gè)線程響應(yīng))
關(guān)于等待/通知,要記住的關(guān)鍵點(diǎn)是:
必須從同步環(huán)境內(nèi)調(diào)用wait()、notify()、notifyAll()方法。線程不能調(diào)用對(duì)象上等待或通知的方法,除非它擁有那個(gè)對(duì)象的鎖。
wait()、notify()、notifyAll()都是Object的實(shí)例方法。與每個(gè)對(duì)象具有鎖一樣,每個(gè)對(duì)象可以有一個(gè)線程列表,他們等待來(lái)自該信號(hào)(通知)。線程通過(guò)執(zhí)行對(duì)象上的wait()方法獲得這個(gè)等待列表。從那時(shí)候起,它不再執(zhí)行任何其他指令,直到調(diào)用對(duì)象的notify()方法為止。如果多個(gè)線程在同一個(gè)對(duì)象上等待,則將只選擇一個(gè)線程(不保證以何種順序)繼續(xù)執(zhí)行。如果沒(méi)有線程等待,則不采取任何特殊操作。
下面看個(gè)例子就明白了:

/** * 計(jì)算輸出其他線程鎖計(jì)算的數(shù)據(jù) */ public class ThreadA { public static void main(String[] args) { ThreadB b = new ThreadB(); //啟動(dòng)計(jì)算線程 b.start(); //線程A擁有b對(duì)象上的鎖。線程為了調(diào)用wait()或notify()方法,該線程必須是那個(gè)對(duì)象鎖的擁有者 synchronized (b) { try { System.out.println("等待對(duì)象b完成計(jì)算。。。"); //當(dāng)前線程A等待 b.wait(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("b對(duì)象計(jì)算的總和是:" + b.total); } } } /** * 計(jì)算1+2+3 ... +100的和 */ public class ThreadB extends Thread { int total; public void run() { synchronized (this) { for (int i = 0; i < 101; i++) { total += i; } //(完成計(jì)算了)喚醒在此對(duì)象監(jiān)視器上等待的單個(gè)線程,在本例中線程A被喚醒 notify(); } } }

結(jié)果:
等待對(duì)象b完成計(jì)算。。。
b對(duì)象計(jì)算的總和是:5050
Process finished with exit code 0

千萬(wàn)注意:
當(dāng)在對(duì)象上調(diào)用wait()方法時(shí),執(zhí)行該代碼的線程立即放棄它在對(duì)象上的鎖。然而調(diào)用notify()時(shí),并不意味著這時(shí)線程會(huì)放棄其鎖。如果線程榮然在完成同步代碼,則線程在移出之前不會(huì)放棄鎖。因此,只要調(diào)用notify()并不意味著這時(shí)該鎖變得可用。

多個(gè)線程在等待一個(gè)對(duì)象鎖時(shí)候使用notifyAll():
在多數(shù)情況下,最好通知等待某個(gè)對(duì)象的所有線程。如果這樣做,可以在對(duì)象上使用notifyAll()讓所有在此對(duì)象上等待的線程沖出等待區(qū),返回到可運(yùn)行狀態(tài)。

如何理解同步:Wait Set

Critical Section(臨界資源)Wait Set(等待區(qū)域)

wait set 類似于線程的休息室,訪問(wèn)共享數(shù)據(jù)的代碼稱為critical section。一個(gè)線程獲取鎖,然后進(jìn)入臨界區(qū),發(fā)現(xiàn)某些條件不滿足,然后調(diào)用鎖對(duì)象上的wait方法,然后線程釋放掉鎖資源,進(jìn)入鎖對(duì)象上的wait set。由于線程釋放釋放了理解資源,其他線程可以獲取所資源,然后執(zhí)行,完了以后調(diào)用notify,通知鎖對(duì)象上的等待線程。

Ps:若調(diào)用notify();則隨機(jī)拿出(這隨機(jī)拿出是內(nèi)部的算法,無(wú)需了解)一條在等待的資源進(jìn)行準(zhǔn)備進(jìn)入Critical Section;若調(diào)用notifyAll();則全部取出進(jìn)行準(zhǔn)備進(jìn)入Critical Section。

6. 總結(jié)與展望



擴(kuò)展建議:如何擴(kuò)展Java并發(fā)知識(shí)

1、Java Memory Mode : JMM描述了java線程如何通過(guò)內(nèi)存進(jìn)行交互,了解happens-before , synchronized,voliatile & final

2、Locks % Condition:Java鎖機(jī)制和等待條件的高層實(shí)現(xiàn) java.util,concurrent.locks

3、線程安全性:原子性與可見(jiàn)性, java.util.concurrent.atomic synchronized(鎖的方法塊)&volatile(定義公共資源) DeadLocks(死鎖)–了解什么是死鎖,死鎖產(chǎn)生的條件

4、多線程編程常用的交互模型

· Producer-Consumer模型(生產(chǎn)者-消費(fèi)者模型)

· Read-Write Lock模型(讀寫(xiě)鎖模型)

· Future模型

· Worker Thread模型

考慮在Java并發(fā)實(shí)現(xiàn)當(dāng)中,有哪些類實(shí)現(xiàn)了這些模型,供我們直接調(diào)用

5、Java5中并發(fā)編程工具:java.util.concurrent 包下的

例如:線程池ExcutorService 、Callable&Future 、BlockingQueue

6、推薦書(shū)本:CoreJava 、 JavaConcurrency In Practice

  • 出處:http://www.cnblogs.com/Qian123/p/5670304.html

文章有不當(dāng)之處,歡迎指正,你也可以關(guān)注我的微信公眾號(hào):好好學(xué)java,獲取優(yōu)質(zhì)學(xué)習(xí)資源,也可以加入QQ技術(shù)交流群:766946816,咋們來(lái)聊聊java。

總結(jié)

以上是生活随笔為你收集整理的java基础提升篇:深入浅出Java多线程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

日韩成人精品在线观看 | 亚洲午夜精品久久久久久久久久久久 | 免费性网站 | 日韩精品2区 | 日韩一区二区三区高清免费看看 | 国产福利av在线 | 免费看的黄网站软件 | 91成人短视频在线观看 | 国产成人精品一区二区在线 | 少妇搡bbbb搡bbb搡aa | 国产成人亚洲在线电影 | 综合色站导航 | 精品国产中文字幕 | 91麻豆操 | 五月天久久狠狠 | 日韩欧美视频一区二区三区 | 久久综合九色综合久久久精品综合 | 久久狠狠干 | 69av国产 | 免费亚洲精品 | 成人黄色电影视频 | 婷婷丁香色 | 丁香五香天综合情 | 久久福利小视频 | 99精品国产在热久久下载 | 国产高清99| 91成人免费在线 | 五月天六月婷婷 | 国产精品免费在线播放 | www.狠狠色 | 久久国产香蕉视频 | 日韩高清在线一区二区三区 | 一区二区视频电影在线观看 | 中文字幕免费高 | 久草在线精品观看 | 国产成人精品久久亚洲高清不卡 | 激情图片区 | 丁五月婷婷| 久草在线这里只有精品 | 日本h在线播放 | 精品国产午夜 | 国产色a在线观看 | 一区二区三区四区在线免费观看 | 911久久| 午夜婷婷综合 | 999久久久| 欧美日韩国产色综合一二三四 | a级国产乱理伦片在线观看 亚洲3级 | 精品一区二区三区四区在线 | 国产在线高清 | 国产黄色片在线免费观看 | 免费午夜网站 | 狠狠色香婷婷久久亚洲精品 | 日韩一二区在线观看 | 国产黄在线免费观看 | 久草在线免费播放 | www在线观看视频 | 97国产小视频 | 亚洲欧洲xxxx | 日韩在线视频免费观看 | 欧美a级免费视频 | 在线观看一区视频 | 欧美日在线观看 | 久久99久久久久 | 国产精品自在线 | 久久99国产精品自在自在app | 人人爽人人插 | 中文在线天堂资源 | 中文字幕在线一区观看 | 五月婷婷综合网 | 国产丝袜美腿在线 | 日日夜夜狠狠操 | 在线观看亚洲精品视频 | 奇米影音四色 | 色综合久久久久久中文网 | 亚洲视频综合在线 | 亚洲午夜久久久影院 | 欧美精品黑人性xxxx | 天堂av网在线 | 黄色片亚洲 | 91av视频观看 | 国产毛片在线 | 国产原创在线视频 | 日日夜夜免费精品视频 | 久久久久国产一区二区三区四区 | 高清有码中文字幕 | 亚洲精品美女久久 | 国产精品欧美激情在线观看 | 99在线视频精品 | 欧美最猛性xxxxx免费 | 天天综合网久久综合网 | 黄色a视频 | 成人资源在线 | 91香蕉视频好色先生 | 操操操日日日干干干 | 天天操天天射天天插 | 久久久精品久久日韩一区综合 | 国产精品久久久久久久久婷婷 | 免费看片黄色 | 四虎成人精品在永久免费 | 在线观看日韩一区 | 免费观看性生活大片3 | 伊人国产在线观看 | 五月开心激情 | 91精品国产欧美一区二区成人 | 久久久鲁 | 国产99久久久国产精品免费二区 | 99视频免费看 | 日韩欧美视频一区 | 久久久官网 | 国产精选在线 | 久草在线资源免费 | 久久毛片高清国产 | 黄色一区二区在线观看 | 麻豆国产在线播放 | 国产免费久久精品 | 91黄色视屏| 久久久人 | 日本久久久久久科技有限公司 | 亚洲高清视频一区二区三区 | www.亚洲黄色 | 久久久毛片 | 五月婷婷色播 | 天天搞天天 | 日韩色区 | 999成人网| 一区二区三区久久精品 | 欧美亚洲成人免费 | 婷婷久久精品 | 免费观看www小视频的软件 | 成人综合日日夜夜 | 韩日电影在线 | 99视频免费 | 久久久一本精品99久久精品 | 亚洲精品99久久久久中文字幕 | 亚洲第一伊人 | 狠狠插狠狠干 | 日韩午夜视频在线观看 | 日韩在线二区 | 一级成人免费视频 | www.天堂av| 免费亚洲黄色 | 国产精品久久久久999 | 黄色精品一区二区 | 亚洲国产精品久久久久婷婷884 | 欧美色操| 国产精品久久久久久久免费观看 | 91av视频 | 精品欧美小视频在线观看 | 欧美日韩高清一区 | 亚洲国产大片 | 日韩在线观看一区 | 久久网站免费 | 欧美a级片网站 | 精品国产免费人成在线观看 | 精品免费在线视频 | 91片黄在线观看动漫 | 国精产品永久999 | 中文一二区 | 免费看的黄色小视频 | 欧美做受xxx | 青草视频在线看 | 婷婷综合五月天 | 天天操天天干天天综合网 | 免费看一级一片 | 一级性av| 亚洲视频在线免费观看 | 日韩免费观看av | 国产黑丝一区二区三区 | 中文字幕在线观看完整版电影 | 99久久久国产精品 | 97精品国产97久久久久久久久久久久 | 成人中文字幕+乱码+中文字幕 | 久青草视频 | 丁香5月婷婷 | 国产做aⅴ在线视频播放 | 天堂在线一区二区三区 | 国产一区在线观看免费 | 97热在线观看 | 99国内精品久久久久久久 | 欧美污污视频 | 天天射天天干 | 午夜精品久久久99热福利 | 国产一区二区三区在线免费观看 | 国产美女久久久 | 色橹橹欧美在线观看视频高清 | 久久精品中文字幕一区二区三区 | 日韩黄视频 | 精品久久片 | 精品一二三区视频 | 人人玩人人添人人 | 国产成人精品一区二区在线 | 99精品国产高清在线观看 | 国产精品久久久影视 | 久久精品96 | 中文字幕中文字幕在线一区 | 色先锋av资源中文字幕 | 亚州人成在线播放 | 日韩色在线观看 | wwwwwww黄| 日b黄色片| 亚洲欧洲精品视频 | 一级片视频免费观看 | 国产伦精品一区二区三区在线 | 欧美成年网站 | 国产成人精品一区二区在线 | 国产中文字幕在线 | 国产日韩欧美在线影视 | 免费在线观看a v | 国产精品专区h在线观看 | 欧美日韩午夜 | av中文字幕第一页 | 欧美精品中文 | 国产在线观看你懂的 | 亚洲精品在线资源 | 亚洲国产精品99久久久久久久久 | 成人a级免费视频 | 国产短视频在线播放 | 91精品91| 国产永久免费观看 | 亚洲日本va午夜在线影院 | 成人一区二区在线观看 | 国产黄色免费在线观看 | 久久精品久久精品久久精品 | 亚洲精品tv久久久久久久久久 | 伊人久操 | 久久久久激情 | 国内三级在线观看 | 香蕉影视 | 久久综合久久综合九色 | zzijzzij亚洲日本少妇熟睡 | 亚洲春色成人 | 欧美精品久久久久久久免费 | 国产精品乱码高清在线看 | 久久黄色影视 | 国产人成看黄久久久久久久久 | 97在线观看免费高清 | av电影中文 | 91亚洲在线 | 丁香花在线视频观看免费 | 天天射天天舔天天干 | 国产精品美女视频 | 色在线网 | 色婷婷国产精品 | 91精品一区二区在线观看 | 国产精品视频免费看 | 98超碰在线观看 | 天天插天天爽 | 波多野结衣精品 | 久久久综合 | 在线免费色 | 色欧美日韩 | 一区二区视频在线观看免费 | 精品国产一区二区三区不卡 | 亚洲午夜精品在线观看 | 久久久久久综合网天天 | 免费视频黄 | 色资源在线 | 日本大片免费观看在线 | 欧美男男激情videos | 精品久久久久久久久中文字幕 | 亚洲黑丝少妇 | 成年人精品 | 波多在线视频 | 四虎影视精品成人 | 黄色99视频| 黄色.com| 免费a视频在线观看 | 96av麻豆蜜桃一区二区 | 亚洲在线激情 | 国产精品久久久久999 | 国产一级黄大片 | 国产色拍拍拍拍在线精品 | 中文字幕久久精品亚洲乱码 | 国产精品福利视频 | 日日爱网站 | 五月婷婷综合在线视频 | 五月天综合激情 | 在线色资源 | 久久国产精品久久w女人spa | 九九热免费精品视频 | 女人18精品一区二区三区 | 国产成人一区二 | 久久精品欧美 | 成人黄色视 | 91亚洲精品久久久久图片蜜桃 | 99在线视频播放 | 日韩美女av在线 | 亚洲视屏在线播放 | 成人久久久久久久久久 | zzijzzij日本成熟少妇 | 黄在线 | www.五月激情.com| 视频国产精品 | 在线看片日韩 | 久久久久女人精品毛片九一 | wwwwww黄 | 欧美精品亚洲精品日韩精品 | 97精品在线视频 | 日韩精品综合在线 | 久久经典国产视频 | 日韩精品免费在线播放 | 九九久久婷婷 | 在线观看你懂的网址 | 在线免费视 | 黄在线免费看 | 亚洲不卡123 | av一本久道久久波多野结衣 | 91最新在线观看 | 亚洲永久av | 国产午夜麻豆影院在线观看 | 高清一区二区三区 | 996久久国产精品线观看 | av成人资源 | 免费观看黄色12片一级视频 | 精品免费视频. | 97在线精品 | 国产精品成人久久久久久久 | 色久网 | 久久爱资源网 | 成人观看视频 | 日韩丝袜视频 | 国产精品黄色 | 国产一级做a爱片久久毛片a | mm1313亚洲精品国产 | 中文字幕日本特黄aa毛片 | 香蕉视频亚洲 | 日日噜噜噜噜夜夜爽亚洲精品 | 91精品国产综合久久婷婷香蕉 | 久久国产精品免费一区二区三区 | 在线播放日韩av | 国产精品毛片一区视频播不卡 | 色综合天天 | 处女av在线 | 全久久久久久久久久久电影 | 九九亚洲视频 | 色妞色视频一区二区三区四区 | 国产成人香蕉 | 久久综合九色综合97_ 久久久 | 久久免费视频7 | 久久99精品一区二区三区三区 | 久久人人爽 | 免费在线激情电影 | 免费观看成人网 | www麻豆视频 | 久久人人爽人人人人片 | 又黄又爽免费视频 | 美女视频a美女大全免费下载蜜臀 | 日韩欧美在线国产 | 国产精品毛片 | 久久综合成人网 | 六月天综合网 | av中文字幕在线免费观看 | 久久69精品久久久久久久电影好 | 视频 国产区 | 久久久久久久国产精品影院 | 国产中文字幕在线免费观看 | 天天av综合网 | www天天干| 成人黄色免费观看 | av在线播放中文字幕 | 久久久99精品免费观看app | 五月激情电影 | 久久国产精品99久久久久久老狼 | 亚洲视频综合在线 | 亚洲精品一区二区三区新线路 | 中文在线a天堂 | 精品国产激情 | 婷婷伊人综合亚洲综合网 | 成人精品福利 | 天天操天天操一操 | 中文字幕在线观看视频免费 | 国产视频综合在线 | 免费av网址大全 | 美女视频久久黄 | 黄毛片在线观看 | 日韩中文字幕亚洲一区二区va在线 | 国内精品久久久久影院日本资源 | 亚洲成aⅴ人片久久青草影院 | 自拍超碰在线 | 国产字幕在线看 | 亚洲h色精品 | 日本久久片 | 亚州精品视频 | 国产成人精品av在线 | 久久久国产99久久国产一 | 18做爰免费视频网站 | 亚洲午夜不卡 | 国产色影院 | 亚洲精品国产电影 | 国产护士av | 999在线视频| 五月天欧美精品 | 久久久久欧美精品999 | 91在线日韩 | av网站免费在线 | 国产精品美女久久久久久久久 | 国产精品久久久精品 | 成人免费视频视频在线观看 免费 | 亚洲精品综合欧美二区变态 | 91精品国产综合久久久久久久 | 国产精品永久在线观看 | 久久久亚洲电影 | 97国产人人| 国产一级不卡视频 | 99色99| 一区二区三区在线观看免费 | 91一区啪爱嗯打偷拍欧美 | 免费进去里的视频 | www色com| 日韩视频在线播放 | 激情综合色播五月 | 国产一二区在线观看 | 国产精品欧美久久久久无广告 | 国产不卡高清 | 亚洲高清视频在线播放 | 黄色午夜 | 欧美日韩视频在线 | 久久久久久久国产精品影院 | 日韩在线网址 | 久久艹欧美 | 西西444www大胆高清图片 | 国产精品黄色 | 九九精品久久 | 亚洲韩国一区二区三区 | 激情网第四色 | 美女免费视频一区二区 | 波多野结衣电影一区 | 999日韩| 国产在线视频资源 | 狠狠插天天干 | 久久精精品视频 | 免费看国产精品 | 麻豆91小视频 | 波多野结衣在线播放一区 | 波多野结衣久久精品 | 国产精品久久久久久久久免费看 | 三级黄色欧美 | 日韩欧美精品一区二区 | 色婷婷视频在线观看 | 久久精品亚洲国产 | 在线精品视频免费播放 | 久久国产精品电影 | 日韩高清免费无专码区 | 91精品国产乱码久久 | 日本久久电影网 | 免费视频91| 亚洲精品成人 | 久久久久成 | 欧美精品一区二区蜜臀亚洲 | 色综合久久久久久久 | 九月婷婷综合网 | 国产精品你懂的在线观看 | 久久高清国产视频 | 国产色中涩 | 西西444www高清大胆 | 五月婷婷激情 | 精品欧美小视频在线观看 | 日韩 精品 一区 国产 麻豆 | 色欧美综合 | 欧美激情综合网 | 成人一级片视频 | 亚洲视频一级 | 肉色欧美久久久久久久免费看 | 日本电影久久 | 在线免费国产视频 | 亚洲综合激情网 | 精品久久久久久亚洲综合网 | 久久99国产精品二区护士 | 久久国产剧场电影 | 亚洲人天堂 | 国产精品观看在线亚洲人成网 | 国产伦理一区二区三区 | 国产精品久久99 | 九九视频在线观看视频6 | 福利视频精品 | 91中文字幕永久在线 | 最近免费中文字幕 | 久久久国产毛片 | 欧美热久久 | 91免费版在线观看 | 九九爱免费视频 | 激情久久一区二区三区 | 久草在线视频免赞 | 91视频麻豆视频 | 成人av在线直播 | 九九热精品视频在线播放 | 久久久网页 | 欧美片一区二区三区 | 色综合久久中文字幕综合网 | 二区三区毛片 | 欧美日韩视频在线观看一区二区 | 国产精品久久久久久久久搜平片 | 中文av一区二区 | 91在线看视频免费 | 综合五月婷婷 | 美女露久久 | 久久久www成人免费精品张筱雨 | 国产精品一区二区果冻传媒 | 一区二区久久 | 色香天天 | 免费看一级特黄a大片 | 五月天狠狠操 | 天天做天天干 | 亚洲第二色 | 操久| 免费观看www7722午夜电影 | 亚洲日日夜夜 | 欧美日高清视频 | 在线不卡中文字幕播放 | 91精选在线| 国产精品久久久久久久午夜片 | 中文字幕在线观看第二页 | 在线视频一二三 | 国产黄 | 亚洲毛片在线观看. | 最近中文字幕视频网 | 99精品久久99久久久久 | 91精品伦理 | 91重口视频 | 国产精品福利午夜在线观看 | 午夜精品电影 | 91成人天堂久久成人 | 国产视频美女 | 国产综合香蕉五月婷在线 | 中文字幕在线观 | 精品欧美一区二区三区久久久 | 免费碰碰 | 久久成电影 | 狠狠干五月天 | 黄色网www| 99久久国产免费,99久久国产免费大片 | 精品在线你懂的 | 天天干天天操天天爱 | 精品在线你懂的 | 天天干天天射天天插 | 超碰久热 | 欧美va天堂va视频va在线 | 精品一区二区三区香蕉蜜桃 | 一级成人在线 | 日韩精品久久久久久中文字幕8 | 成人av在线网 | 国产视频欧美视频 | 午夜av色 | 狠狠黄 | 国产精品k频道 | 久久久久久久av | 免费亚洲视频在线观看 | 激情视频亚洲 | 亚洲综合色激情五月 | 97香蕉久久超级碰碰高清版 | 黄色软件视频网站 | 免费看的黄网站 | 久久超碰免费 | 亚洲精品mv在线观看 | 国产91电影在线观看 | 久久精品毛片 | 亚洲成人第一区 | 在线观看播放av | 欧美天天综合 | 免费黄色av. | 一区二区精品视频 | 91看毛片 | 国产精品一区二 | 五月婷视频 | 久国产在线播放 | 91亚洲精品国偷拍自产在线观看 | 国产三级视频在线 | 97色涩| 成人a免费 | av大全在线观看 | 日本在线观看一区二区三区 | 天天操综合网站 | 九九色网 | a级国产乱理论片在线观看 伊人宗合网 | 成人免费av电影 | 日韩字幕在线观看 | av一级在线观看 | 九七视频在线观看 | 九九精品视频在线看 | 在线观看黄色小视频 | 九色视频自拍 | 日本久久精 | 日本大片免费观看在线 | 国产精品福利视频 | 最近日韩免费视频 | 毛片网免费 | 欧美日本高清视频 | 久久精品国产成人精品 | 精品一二三四在线 | 日韩一二区在线观看 | 中文字幕在线影院 | 国产一级在线看 | 草久中文字幕 | 日日日爽爽爽 | 天天激情综合网 | 日韩在线高清免费视频 | 欧美成人日韩 | 国产手机视频在线 | 在线观看岛国av | 久久精品国产精品亚洲 | 亚洲第一av在线播放 | 国产在线久久久 | 中文国产在线观看 | 啪啪资源 | 成人黄色一级视频 | 五月天激情视频在线观看 | 狠狠色噜噜狠狠 | 17婷婷久久www| 麻豆va一区二区三区久久浪 | 美女福利视频在线 | 久久久久高清毛片一级 | 特级a毛片 | 三级av在线 | 免费看一级片 | 99精品在线免费 | 国产福利一区二区三区在线观看 | 亚洲高清精品在线 | 成人黄色大片网站 | 日韩欧美一区二区三区在线 | 国产成免费视频 | 69久久久久久久 | 福利一区二区在线 | 国产在线精品国自产拍影院 | 国产精品va在线观看入 | 97福利视频 | 日韩四虎 | 韩日视频在线 | 国产在线一卡 | h文在线观看免费 | 精品在线观看一区二区 | 国产探花视频在线播放 | 亚洲成a人片77777kkkk1在线观看 | 国产福利资源 | av电影中文字幕在线观看 | 一级黄色片在线免费看 | 欧美九九九| wwwwww色| 国语久久 | 99精品国产成人一区二区 | 欧美日韩亚洲精品在线 | 特黄免费av | 天天干亚洲| 国产免费高清视频 | 国产专区一 | 日韩视频一二三区 | 国产高清在线精品 | 午夜精品久久久久久 | 免费一区在线 | 亚洲精品国产精品国产 | 黄色av网站在线观看免费 | 五月婷婷丁香在线观看 | 日韩欧美在线视频一区二区 | 国产青草视频在线观看 | 97天天干| 在线观看的av网站 | 在线观看免费福利 | 国产高清在线一区 | 欧美日韩xxxxx | 久久久精品免费看 | 成年人网站免费在线观看 | 精品免费一区二区三区 | 欧美激情视频一二三区 | 在线电影日韩 | 中文字幕免费观看 | 九九色在线观看 | 成人国产精品一区二区 | 伊人色播 | 成年人视频免费在线 | 五月天久久激情 | 天天操天天操天天操天天操天天操天天操 | 狠狠躁日日躁狂躁夜夜躁av | 色婷婷激情综合 | 五月天久久久 | 麻豆 free xxxx movies hd| 精品av在线播放 | 五月激情婷婷丁香 | 免费视频97 | 精久久久久 | www狠狠操| av综合 日韩| 婷婷亚洲综合五月天小说 | 人人cao | 91丨九色丨勾搭 | 美女视频黄在线观看 | 99久久精品国产欧美主题曲 | 极品国产91在线网站 | 精品国模一区二区三区 | 欧美一级淫片videoshd | 午夜三级影院 | 中文字幕在线一区二区三区 | 97视频中文字幕 | 久久国产一区二区 | 欧美九九九 | 色婷婷电影网 | 九九在线视频 | 亚洲一区二区精品视频 | 一区二区在线影院 | 欧美日韩二三区 | 国产精品久久免费看 | 国产精品av久久久久久无 | 国产二区电影 | 久久精品国产一区二区 | 亚洲精区二区三区四区麻豆 | 国产午夜在线观看视频 | 人人爽人人片 | 国产精品视频99 | 国产男女免费完整视频 | 日本免费久久高清视频 | 国产高清区 | 日日夜夜免费精品视频 | 中文字幕国产一区二区 | 99久久99久久精品国产片果冰 | 久久久久久久久久久影视 | 亚洲黄色小说网址 | 偷拍精偷拍精品欧洲亚洲网站 | 久久久高清视频 | 免费在线色电影 | 日韩免费电影 | 夜夜夜精品 | 日日日日日 | 亚洲一区精品二人人爽久久 | 久久电影国产免费久久电影 | 97视频入口免费观看 | 特及黄色片 | 国产九九九九九 | 精品一区精品二区 | 成人97视频 | 国产精品99精品久久免费 | 免费三级av| 狠狠狠狠狠干 | 免费av网站在线看 | 91粉色视频 | 精品在线一区二区 | 日日干日日 | 国产精品亚洲人在线观看 | 欧美日韩免费在线观看视频 | 69性欧美 | 青草视频在线播放 | 亚洲免费精品一区二区 | 一区二区精品视频 | 国产精品久久久久久久久费观看 | 国产亚洲欧美一区 | 超碰99人人 | 少妇性bbb搡bbb爽爽爽欧美 | 天天综合精品 | 色香蕉视频 | 日韩精品久久一区二区 | www.夜夜草 | 亚洲国产成人高清精品 | 久久免费播放 | 国产看片 色 | 久久中国精品 | 日日夜夜狠狠操 | 婷婷在线色 | 国产精品va在线播放 | 深夜国产福利 | 国产99久久久欧美黑人 | 婷婷 综合 色 | 日本黄色大片免费 | 91综合久久一区二区 | aaa日本高清在线播放免费观看 | 人人模人人爽 | 最新av观看 | 欧美精品免费一区二区 | 麻豆视频国产 | 色偷偷中文字幕 | 中文字幕一区二区三区久久 | 91女神的呻吟细腰翘臀美女 | 丁香六月av | 欧美午夜精品久久久久久浪潮 | 久久综合欧美 | 在线国产能看的 | 久久在线观看 | 国产精品白丝av | 精品 一区 在线 | 婷婷在线免费视频 | 激情喷水 | 国产黄色片网站 | 亚洲一区 av | 日本高清久久久 | 久久久精品欧美 | 瑞典xxxx性hd极品 | 国产区av在线 | 在线免费亚洲 | 99精品亚洲 | 日韩大片在线播放 | caobi视频| 日韩在线资源 | 天天综合久久 | 黄色片视频免费 | 国产一级视频 | 欧美日韩精品国产 | 九九涩涩av台湾日本热热 | 91看片淫黄大片一级在线观看 | 最新日本中文字幕 | 国产色视频网站2 | av免费高清观看 | www.天天射.com | 国产精品一级视频 | av女优中文字幕在线观看 | 日韩精品欧美视频 | 日本特黄一级片 | 玖玖999| 福利一区二区在线 | 91成人破解版 | 亚洲视频1| 国产 日韩 欧美 在线 | 婷婷色 亚洲 | 久久免费国产电影 | 99在线免费视频 | 91香蕉国产在线观看软件 | 成人黄色在线 | 国产不卡视频在线 | 亚洲精品字幕在线观看 | 天天曰天天干 | 中文字幕av在线免费 | 97日日碰人人模人人澡分享吧 | 黄色三级免费观看 | 日本不卡一区二区三区在线观看 | 亚洲精品视频在线免费播放 | 中文字幕在线观看一区二区三区 | 国产日本在线观看 | 久久久在线 | 伊人天堂久久 | av三级在线免费观看 | 日本久久不卡视频 | 欧美激情精品久久久久久变态 | 日韩精品视频第一页 | 日韩在线视频一区 | 亚洲一区二区三区四区精品 | 欧美伦理一区 | 国产福利网站 | 日日夜夜人人天天 | 欧美一级视频免费看 | 国产精品九九久久99视频 | 精品91在线| 一本一道久久a久久精品蜜桃 | 免费在线黄| 日日夜夜噜噜噜 | 中文字幕在线看视频国产 | 国产精品一区二区久久精品爱微奶 | 99视频免费| 最近免费中文字幕 | 国产成人精品一区二区三区在线 | 国产精品福利小视频 | 亚洲国产精品影院 | 亚洲电影网站 | 在线观看国产中文字幕 | 色综合天 | 日韩videos高潮hd | 久久理论片 | 808电影| 日韩欧美网址 | 91mv.cool在线观看 | 亚洲激情p| 天天综合色网 | 毛片一级免费一级 | 久久五月婷婷丁香 | 98超碰在线 | 久久综合九色99 | 国产精品久久久久久久久软件 | 国产专区视频在线 | 天天色天天操综合 | 精品在线观看视频 | 黄色软件在线观看视频 | 97视频在线免费 | 久久亚洲私人国产精品va | 91激情视频在线观看 | 夜夜操狠狠操 | 中文字幕资源网在线观看 | 一区二区三区污 | 夜夜爽www | 在线三级av | 成人一级免费视频 | 久久久久久亚洲精品 | 免费观看国产成人 | 亚洲成熟女人毛片在线 | 婷婷丁香六月 | 最近日本中文字幕 | 99热国产在线观看 | 日韩高清在线看 | 久久视频中文字幕 | av电影免费看 | 日韩精选在线观看 | 一区精品久久 | 欧美性精品 | 国产高清日韩欧美 | 精品一区91 | 国产成人免费 | 五月天综合色激情 | 五月婷在线 | 久久久久www | 黄色美女免费网站 | 人人干在线观看 | 国产在线一卡 | 在线播放国产一区二区三区 | 国产不卡毛片 | 久久狠狠一本精品综合网 | 天天射天天舔天天干 | 日韩69视频 | 天天综合精品 | 毛片一级免费一级 | 国产一级性生活视频 | 人人射人人插 | 欧美 日韩 久久 | 成片视频免费观看 | 色狠狠操 | 九九热在线观看视频 | 久久综合五月天婷婷伊人 | 国产视频色| 久久草草热国产精品直播 | 免费看毛片在线 | 国产麻豆精品免费视频 | 国产99久久九九精品免费 | 正在播放 久久 | 国产精品久久久久久久久久久久冷 | 91av视频导航 | 亚洲成人家庭影院 | 午夜天使 | 国产色女 | 91麻豆国产 | www日韩在线 | 欧美黑吊大战白妞欧美 | 亚洲精品欧美精品 | 国产一级久久久 | 日本久久精 | 亚洲黄色免费观看 | 色视频网址 | 国产伦理一区二区 | 五月天综合激情 | 97色在线观看免费视频 | 东方av在| 久久夜色精品国产欧美乱极品 | 国产亚洲综合在线 | 日韩91在线 | 亚洲精品国偷拍自产在线观看蜜桃 | 久久黄色影视 | 欧美成年人在线视频 | 五月开心网| 国产精品一区二区电影 | 午夜视频亚洲 | 日本在线视频一区二区三区 | 日韩精品在线播放 | 永久av免费在线观看 | 日韩一级片观看 | 久久久久久久久久久久久9999 | 欧美日韩成人一区 | 国产精品成人久久久 | 国产精品第54页 | 久久综合影院 | 麻豆一精品传二传媒短视频 | 欧美一区二区三区在线观看 | 友田真希x88av | 超碰伊人网 | 国产精品一区专区欧美日韩 | 夜夜嗨av色一区二区不卡 | 91在线免费视频 | 99久久久久久久 | 亚洲国产中文字幕在线视频综合 | 日韩电影在线一区 | 在线看片中文字幕 | 国产精品3区 | av黄网站 | 欧美日韩一区久久 | 麻豆视频在线免费看 | 丝袜美腿亚洲综合 | 69精品在线| 91中文在线观看 | 亚洲国产精品推荐 | 国产在线免费观看 | 91麻豆操 | 欧美日韩在线视频一区二区 | 免费在线观看日韩视频 | 在线亚洲精品 | 久久手机看片 | 欧美男同网站 | 国产.精品.日韩.另类.中文.在线.播放 | 99久高清在线观看视频99精品热在线观看视频 | 欧美在线a视频 | 97精品国产一二三产区 | 日韩精品久久一区二区 | 91成人免费电影 | 天天天天爱天天躁 | 国产精品美女久久 | 九色视频网| 久久久精品日本 | 中文字幕免费一区二区 | 91| 国产精品va在线观看入 | 丁香婷婷网 | 国产乱老熟视频网88av | 国产亚洲精品久久网站 | 亚洲精品一区二区18漫画 | 99热精品久久 | 欧美最新另类人妖 | 亚洲美女视频在线 | 成 人 黄 色 视频免费播放 |