大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java基礎學習:java多線程設計模式教程

Java基礎學習:java多線程設計模式教程

更新時間:2020-04-08 11:04:36 來源:動力節點 瀏覽2312次


    用于表示多個操作“依次處理”。比如把十個操作交給一個人來處理時,這個人要一個一個地按順序來處理


    并行


    用于標識多個操作“同時處理”。比如十個操作分給兩個人處理時,這兩個人就會并行來處理。


    并發


    相對于順序和并行來說比較抽象,用于表示“將一個操作分割成多個部分并且允許無序處理”。比如將十個操作分成相對獨立的兩類,這樣便能夠開始并發處理了。如果一個人來處理,這個人就是順序處理分開的并發操作,而如果是兩個人,這兩個人就可以并行處理同一個操作。


    總結


    多線程程序都是并發處理的。如果CPU只有一個,那么并發處理就是順序執行的,而如果有多個CPU,那么并發處理就可能會并行運行。


    并發處理的順序執行與并發處理的并行執行示意圖如下所示


Java基礎學習:java多線程設計模式教程


    線程啟動與中止


    啟動方式


    Thread


    Runnable


    以上兩種方式都需要使用start方法用于啟動新的線程,在此需要注意的事情是,啟動新線程調用的是start方法而不是run方法


    終止


    直到所有的線程都終止后,程序才會終止。也就是說,當這兩個線程都終止后,程序才會終止。


    Java程序的終止是指除守護線程以外的線程全部終止。守護線程是執行后臺作業的線程。我們可以通過setDaemon方法把線程設置為守護線程。


    小知識


    java.util.concurrent包中包含一個將線程創建抽象化的ThreadFactory接口。利用該接口,我們可以將Runnable作為傳入參數并通過new創建Thread實例的處理隱藏在ThreadFactory內部。


    Executors類中含有多種創建ThreadFactory的方法,感興趣的可以去看一下源碼


    synchronized相關


    synchronized方法


    如果聲明一個方法時,在前面加上關鍵字synchronized那么這個方法就只能由一個線程運行。只能由一個線程運行是每次只能由一個線程運行的意思,并不是說僅能讓某一特定線程運行。這種方法叫做synchronized,有時也稱為同步方法。


    synchronizedvoidmethod(){

    ...

    }

    復制代碼


    synchronized代碼塊


    如果只是想讓方法中的某一部分由一個線程運行,而非整個方法,則可使用synchronized代碼塊


    synchronized(表達式){

    ...

    }

    復制代碼


    synchronized實例方法和synchronized代碼塊


    假設有如下synchronized實例方法


    synchronizedvoidmethod(){

    ...

    }

    復制代碼


    這跟下面將方法體用synchronized代碼塊包圍起來是等效的


    voidmethod(){

    synchronized(this){

    ...

    }

    }

    復制代碼


    synchronized實例方法是使用this的鎖來執行線程的互斥處理的


    synchronized靜態方法和synchronized代碼塊


    synchronized靜態方法和synchronized實例方法是相同的。但是synchronized靜態方法使用的鎖和synchronized實例方法使用的鎖是不一樣的


    classSomething{

    staticsynchronizedvoidmethod(){

    ...

    }

    }

    復制代碼


    這跟下面將方法體用synchronized代碼塊包圍起來是等效的


    classSomething{

    staticvoidmethod(){

    synchronized(Something.class){

    ...

    }

    }

    }

    復制代碼


    synchronized靜態方法是使用該類的類對象鎖來執行線程的互斥處理的。Something.class是Something類對應的java.lang.class類的實例


    wait、notify和notifyAll


    等待隊列


    所有實例都擁有一個等待隊列,它是在實例的wait方法執行后停止操作的線程隊列。就好比為每個實例準備的線程休息室


    在執行wait方法后,線程便會暫停操作,(獲取相關資料加群:874811168)進入等待隊列這個休息室。除非發生下列某一情況,否則線程會一直在等待隊列中休眠。


    有其他線程的notify方法來喚醒線程


    有其他線程的notifyAll方法來喚醒線程


    有其他線程的interrupt方法來喚醒線程


    wait方法超時


    若要執行wait方法,線程必須持有鎖。但如果線程進入等待隊列,便會釋放其實例的鎖


    notify方法


    該方法會將等待隊列中的一個線程去除。同wait方法一樣,若要執行notify方法,線程也必須持有要調用的實例的鎖。


    notify喚醒的線程并不會在執行notify的一瞬間就重新運行。因為在執行notify的那一瞬間,執行notify的線程還持有著鎖,所以其他線程還無法獲取這個實例的鎖


    notifyAll方法


    notify方法僅喚醒一個線程,而notifyAll則喚醒所有線程,這是兩者之間唯一的區別


    同wait方法和notify方法一樣,notifyAll方法也只能由持有要調用的實例鎖的線程調用


    notify和notifyAll選擇


    notify方法和notifyAll方法非常相似,到底該使用哪個?


    實際上,這很難選擇,由于notify喚醒的線程較少,所以處理速度要比使用notifyAll時快。但使用notify時,如果處理不好,程序便可能會停止。一般來說,使用notifyAll時的代碼要比使用notify時的更為健壯。


Java基礎學習:java多線程設計模式教程


 以上就是動力節點java培訓機構的小編針對“Java基礎學習:java多線程設計模式教程”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。


提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 亚洲精品一区二区三区国产 | 亚洲欧美日韩不卡一区二区三区 | 久久国产成人精品麻豆 | 国产一区二区在线视频 | 午夜 福利 | 三a毛片| 成熟热自由日本语亚洲人 | 日本不卡视频在线观看 | 99精品视频在线在线视频观看 | 99精品大学生啪啪自拍 | 人人狠狠综合久久亚洲 | 美女网站视频免费 | 国产香蕉视频在线播放 | 国内精品视频一区 | 国产欧美日韩精品一区二区三区 | 777精品成人影院 | 久久精品人| 亚洲麻豆视频 | 成人a毛片在线看免费全部播放 | 亚洲精品麻豆 | 国产日韩亚洲欧洲一区二区三区 | 国产精品成在线观看 | 激情婷婷网 | 国内精品免费一区二区三区 | 日本jizz中国| a性视频| 免费一级毛片无毒不卡 | 欧美一级性视频 | 色综合久久一区二区三区 | 99久久精品国产免费 | 国产成人亚洲综合一区 | 青春禁区视频在线观看动漫版 | 日本囗交做爰视频欧美 | 国产免费爱在线观看视频 | 国产精品午夜久久 | 九九热精品视频在线 | 亚欧成人一区二区 | 夜夜艹日日干 | 免费观看性欧美毛片 | 国产日韩精品一区二区 | va亚洲va日韩不卡在线观看 |