多線程

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 多線程

什么是多線程:

?多任務(wù)多條路徑多個順序流同時執(zhí)行就是多線程

線程的優(yōu)點:

?提高效率,同時執(zhí)行

缺點: 復(fù)雜

多線程的創(chuàng)建方式:

?1. 繼承Thread類,重寫run()方法,run方法中定義多線程的線程體

2. 實現(xiàn)Runnable接口,重寫run()方法

?推薦:

?1.避免單繼承的局限性

2.實現(xiàn)資源共享

?3. 實現(xiàn)Callable接口,重寫call方法

線程狀態(tài):

?新生狀態(tài):new創(chuàng)建一個線程的時候

?就緒狀態(tài):start(),線程會進入就緒隊列,等待cpu的調(diào)度

?運行狀態(tài):cpu調(diào)用分配時間片給線程,線程就會運行

?阻塞狀態(tài):sleep()...

? 終止?fàn)顟B(tài):線程結(jié)束了

? 一個線程一旦就如到阻塞狀態(tài),阻塞解除之后,不會馬上恢復(fù)到運行,會恢復(fù)到就緒狀態(tài),再次等待cpu的調(diào)度

?一個線程一旦進入終止?fàn)顟B(tài),再也不會恢復(fù)


?如何一個線程進入就緒狀態(tài):

?1.start()

? ?2.阻塞解除

? ?3.線程切換,被切換的線程會恢復(fù)就緒狀態(tài)

?3.yield() 禮讓線程??

? 進入阻塞狀態(tài)的方式:

? ?1.sleep

? ?2.wait

? ?3.join

?如何控制一個線程終止:

?1.stop..不推薦 2.通過表示判斷 3.正常執(zhí)行結(jié)束

?sleep(): 線程睡眠

? ?1)模擬網(wǎng)絡(luò)延遲

? ?2)放大問題的可能性

?讓出cpu的資源,不會讓出對象的鎖(保證資源睡覺),指定休息多少毫秒

線程安全:

?多線程同時操作同一份資源才有可能會出現(xiàn)線程不安全的問題,需要控制安全

?同步鎖: synchronized

? 同步方法 : 在方法上使用synchronized修飾

成員方法,相當(dāng)于鎖this,代碼范圍為方法

靜態(tài)方法,相當(dāng)于鎖類(類的class對象),代碼范圍為方法

? 同步塊 synchronized(鎖的內(nèi)容){同步的代碼范圍}

? ?鎖的內(nèi)容: this 類.class? 資源(成員變量)

?鎖的范圍:{}->中代碼的范圍

?注意:

?鎖的范圍太大,效率低

?鎖的范圍太小,鎖不住*? 鎖不變的內(nèi)容


為了讓線程排隊執(zhí)行{}中的代碼

?同步塊 synchronized(鎖的內(nèi)容){同步的代碼范圍}

?鎖的內(nèi)容: this 類.class? 資源(成員變量)

? ? 類.class 相當(dāng)于把這個類,類的所有內(nèi)容鎖住了,類的所有對象都鎖住

?this 當(dāng)前調(diào)用成員方法的對象,相當(dāng)于把這個對象的所有資源都鎖住了,可以只鎖資源

?資源: 成員變量,一定要是自定義的引用數(shù)據(jù)類型的對象

鎖的范圍:{}->中代碼的范圍

? 注意:

? ?鎖的范圍太大,效率低

?鎖的范圍太小,鎖不住

? ?鎖不變的內(nèi)容


線程通信: 生產(chǎn)者消費者模式

?wait() 等待,進入這個對象的等待池中進行等待,等待被喚醒

wait會讓出spu的資源,并且釋放對象的鎖

?notify() 喚醒? notifyAll(),喚醒對象等待池中的線程

?處于可運行的狀態(tài),但是需要滿足同步要求并被cpu調(diào)度才能執(zhí)行

? 要求使用在一個同步環(huán)境下,同步一個相同的對象才行

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Java多線程學(xué)習(xí) [-] 一擴展javalangThread類 二實現(xiàn)javalangRunnable接口 三T...
    影馳閱讀 3,112評論 1 18
  • 本文主要講了java中多線程的使用方法、線程同步、線程數(shù)據(jù)傳遞、線程狀態(tài)及相應(yīng)的一些線程函數(shù)用法、概述等。 首先講...
    李欣陽閱讀 2,600評論 1 15
  • 林炳文Evankaka原創(chuàng)作品。轉(zhuǎn)載自http://blog.csdn.net/evankaka 本文主要講了ja...
    ccq_inori閱讀 735評論 0 4
  • Java 多線程 線程和進程的區(qū)別 線程和進程的本質(zhì):由CPU進行調(diào)度的并發(fā)式執(zhí)行任務(wù),多個任務(wù)被快速輪換執(zhí)行,使...
    安安zoe閱讀 2,266評論 1 18
  • 1.解決信號量丟失和假喚醒 public class MyWaitNotify3{ MonitorObject m...
    Q羅閱讀 1,015評論 0 1

友情鏈接更多精彩內(nèi)容