Java多線程編程

進(jìn)程:一個進(jìn)程包括由操作系統(tǒng)分配的內(nèi)存空間,包含一個或多個線程。一個線程不能獨(dú)立的存在,它必須是進(jìn)程的一部分。一個進(jìn)程一直運(yùn)行,直到所有的非守護(hù)線程都結(jié)束運(yùn)行后才能結(jié)束.
多線程能滿足程序員編寫高效率的程序來達(dá)到充分利用CPU的目的。

一個線程的生命周期

線程
  • 新建狀態(tài):
    使用new關(guān)鍵字和Thread類或子類建立一個線程對象后,該線程對象就處于新建狀態(tài)。保持這個狀態(tài)直到程序start()這個線程
  • 就緒狀態(tài)
    調(diào)用start()方法后。就緒狀態(tài)的線程處于就緒隊列中,要等待JVM里線程調(diào)度器的調(diào)度。
  • 運(yùn)行狀態(tài):
    如果就緒狀態(tài)的線程獲取CPU資源,就可以執(zhí)行run(),此時線程便處于運(yùn)行狀態(tài)。運(yùn)行
  • 阻塞狀態(tài):
    線程執(zhí)行sleep(睡眠)suspend(掛起)等方法,失去所占用資源之后,由運(yùn)行狀態(tài)進(jìn)入阻塞狀態(tài)。
    睡眠狀態(tài)已到或獲得設(shè)備資源后可以重新進(jìn)入就緒狀態(tài)。
    • 等待阻塞:運(yùn)行狀態(tài)執(zhí)行wait()方法。
    • 同步阻塞:線程在獲取同步鎖失敗(因?yàn)橥芥i被其他線程占用)。
      -其他阻塞:通過調(diào)用線程的sleep()或join()發(fā)出了I/O請求時,線程會進(jìn)入阻塞狀態(tài)。當(dāng)sleep() 狀態(tài)超時,join() 等待線程終止或超時,或者 I/O 處理完畢,線程重新轉(zhuǎn)入就緒狀態(tài)。
  • 死亡狀態(tài):
    完成任務(wù)或者其他終止條件發(fā)生時。

線程的優(yōu)先級

Java線程的優(yōu)先級是整數(shù),其取值范圍是
1 (Thread.MIN_PRIORITY ) - 10 (Thread.MAX_PRIORITY )
默認(rèn)情況下,每一個線程都會分配一個優(yōu)先級 NORM_PRIORITY(5)
具有較高優(yōu)先級的線程對程序更重要,并且應(yīng)該在低優(yōu)先級的線程之前分配處理器資源。

但是,線程優(yōu)先級不能保證線程執(zhí)行的順序,而且非常依賴于平臺。

創(chuàng)建一個線程

三種方法

  • 實(shí)現(xiàn)Runnable接口
  • 通過集成Thread類本身
  • 通過Callable和Future創(chuàng)建線程

創(chuàng)建線程的三種方式的對比

  1. 采用實(shí)現(xiàn) Runnable、Callable 接口的方式創(chuàng)建多線程時,線程類只是實(shí)現(xiàn)了 Runnable 接口或 Callable 接口,還可以繼承其他類。

  2. 使用繼承 Thread 類的方式創(chuàng)建多線程時,編寫簡單,如果需要訪問當(dāng)前線程,則無需使用 Thread.currentThread() 方法,直接使用 this 即可獲得當(dāng)前線程。

使用

有效利用多線程的關(guān)鍵是理解程序是并發(fā)執(zhí)行而不是串行執(zhí)行的。例如:程序中有兩個子系統(tǒng)需要并發(fā)執(zhí)行,這時候就需要利用多線程編程。

通過對多線程的使用,可以編寫出非常高效的程序。不過請注意,如果你創(chuàng)建太多的線程,程序執(zhí)行的效率實(shí)際上是降低了,而不是提升了。

請記住,上下文的切換開銷也很重要,如果你創(chuàng)建了太多的線程,CPU 花費(fèi)在上下文的切換的時間將多于執(zhí)行程序的時間!

參考:菜鳥教程
https://www.runoob.com/java/java-multithreading.html

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

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

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