資源簡(jiǎn)介
Java 給多線程編程提供了內(nèi)置的支持。 一條線程指的是進(jìn)程中一個(gè)單一順序的控制流,一個(gè)進(jìn)程中可以并發(fā)多個(gè)線程,每條線程并行執(zhí)行不同的任務(wù)。
多線程是多任務(wù)的一種特別的形式,但多線程使用了更小的資源開銷。
這里定義和線程相關(guān)的另一個(gè)術(shù)語 - 進(jìn)程:一個(gè)進(jìn)程包括由操作系統(tǒng)分配的內(nèi)存空間,包含一個(gè)或多個(gè)線程。一個(gè)線程不能獨(dú)立的存在,它必須是進(jìn)程的一部分。一個(gè)進(jìn)程一直運(yùn)行,直到所有的非守護(hù)線程都結(jié)束運(yùn)行后才能結(jié)束。
多線程能滿足程序員編寫高效率的程序來達(dá)到充分利用 CPU 的目的。
一個(gè)線程的生命周期
線程是一個(gè)動(dòng)態(tài)執(zhí)行的過程,它也有一個(gè)從產(chǎn)生到死亡的過程。
下圖顯示了一個(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)。可以分為三種:
-
等待阻塞:運(yùn)行狀態(tài)中的線程執(zhí)行 wait() 方法,使線程進(jìn)入到等待阻塞狀態(tài)。
-
同步阻塞:線程在獲取 synchronized 同步鎖失敗(因?yàn)橥芥i被其他線程占用)。
-
其他阻塞:通過調(diào)用線程的 sleep() 或 join() 發(fā)出了 I/O 請(qǐng)求時(shí),線程就會(huì)進(jìn)入到阻塞狀態(tài)。當(dāng)sleep() 狀態(tài)超時(shí),join() 等待線程終止或超時(shí),或者 I/O 處理完畢,線程重新轉(zhuǎn)入就緒狀態(tài)。
-
-
死亡狀態(tài):
一個(gè)運(yùn)行狀態(tài)的線程完成任務(wù)或者其他終止條件發(fā)生時(shí),該線程就切換到終止?fàn)顟B(tài)。
線程的優(yōu)先級(jí)
每一個(gè) Java 線程都有一個(gè)優(yōu)先級(jí),這樣有助于操作系統(tǒng)確定線程的調(diào)度順序。
Java 線程的優(yōu)先級(jí)是一個(gè)整數(shù),其取值范圍是 1 (Thread.MIN_PRIORITY ) - 10 (Thread.MAX_PRIORITY )。
默認(rèn)情況下,每一個(gè)線程都會(huì)分配一個(gè)優(yōu)先級(jí) NORM_PRIORITY(5)。
具有較高優(yōu)先級(jí)的線程對(duì)程序更重要,并且應(yīng)該在低優(yōu)先級(jí)的線程之前分配處理器資源。但是,線程優(yōu)先級(jí)不能保證線程執(zhí)行的順序,而且非常依賴于平臺(tái)。
創(chuàng)建一個(gè)線程
Java 提供了三種創(chuàng)建線程的方法:
- 通過實(shí)現(xiàn) Runnable 接口;
- 通過繼承 Thread 類本身;
- 通過 Callable 和 Future 創(chuàng)建線程。
通過實(shí)現(xiàn) Runnable 接口來創(chuàng)建線程
創(chuàng)建一個(gè)線程,最簡(jiǎn)單的方法是創(chuàng)建一個(gè)實(shí)現(xiàn) Runnable 接口的類。
為了實(shí)現(xiàn) Runnable,一個(gè)類只需要執(zhí)行一個(gè)方法調(diào)用 run(),聲明如下:
代碼片段和文件信息
評(píng)論
共有 條評(píng)論
相關(guān)資源
- java swing樹形菜單結(jié)構(gòu),動(dòng)態(tài)選擇數(shù)據(jù)
- java高德地圖百度人臉
- 黑馬程序員 javaweb源碼
- 后端提供接口文檔模板(.docx)
-
android 中 ja
vasc ript 與java 交互 - 批量替換 android反編譯之后 R.java文件
- java 數(shù)字證書 (廣大信息安全研究所
- java 三角形面積計(jì)算(文件讀取)
- android java 通用代碼,關(guān)于用propertie
- java 圖片壓縮
- jQuery便條插件+jStickyNote
- android 多線程斷電續(xù)傳文件
- SCJP_認(rèn)證考試指南
- Android自動(dòng)生成JavaBean
- java 入門級(jí)(類 繼承 入門)
- java將文件壓縮為RAR文檔(原理是調(diào)用
- java 讀取PDF文件中的內(nèi)容.zip
- java版:ECC加密解密
- Android 使用WebView訪問明日學(xué)院(網(wǎng)絡(luò)
- Android 國內(nèi)新聞(網(wǎng)絡(luò)編程-13_120).
- Java面試寶典2019版.pdf
- 《Java 8實(shí)戰(zhàn)》pdf 高清版
- 基于SpringBoot實(shí)現(xiàn)Java高并發(fā)之秒殺系統(tǒng)
- java設(shè)計(jì)模式4562
- java電影網(wǎng)站源碼(附數(shù)據(jù)庫)
- Java數(shù)據(jù)結(jié)構(gòu)和算法(第二版).pdf
- 北大青鳥S2java第十章嗖嗖移動(dòng)大廳
- 銀行利率計(jì)算工具Android Studio項(xiàng)目
- spring boot mybatis jsp前端展示對(duì)mysql增刪
- 基于jsp+mysql的二手物品交易系統(tǒng)源碼