概念
程序(Program)是對(duì)數(shù)據(jù)描述與操作的代碼集合肛冶,如:Word、暴風(fēng)影音等應(yīng)用程序宫莱。是一個(gè)靜態(tài)的概念
進(jìn)程(Process)是程序的一次動(dòng)態(tài)的執(zhí)行過(guò)程静汤,它對(duì)應(yīng)了從代碼加載逆甜、執(zhí)行至執(zhí)行完畢的一個(gè)完整的過(guò)程教藻,這個(gè)過(guò)程也是進(jìn)程本身從產(chǎn)生篡悟、發(fā)展至消亡的過(guò)程谜叹。是一個(gè)動(dòng)態(tài)概念匾寝。
進(jìn)程的特點(diǎn):
進(jìn)程是系統(tǒng)運(yùn)行程序的基本單位。
每一個(gè)進(jìn)程都有自己獨(dú)立的一塊內(nèi)存空間叉谜、一組系統(tǒng)資源旗吁。
每一個(gè)進(jìn)程的內(nèi)部數(shù)據(jù)和狀態(tài)都是完全獨(dú)立的。
線程是進(jìn)程中執(zhí)行運(yùn)算的最小單位停局,一個(gè)進(jìn)程在其執(zhí)行過(guò)程中可以產(chǎn)生多個(gè)線程很钓,而線程必須在某個(gè)進(jìn)程內(nèi)執(zhí)行。
進(jìn)程按處理級(jí)別可分為:
核心級(jí)線程
核心級(jí)線程是和系統(tǒng)任務(wù)相關(guān)的線程董栽,它負(fù)責(zé)處理不同進(jìn)程之間的多個(gè)線程码倦。允許不同進(jìn)程中的線程按照同一相對(duì)優(yōu)先掉隊(duì)的方法對(duì)線程進(jìn)行調(diào)度,使它們有條不紊地工作锭碳,可以發(fā)揮處理器的并發(fā)優(yōu)勢(shì)袁稽,以充分利用計(jì)算機(jī)的軟/硬件資源
用戶級(jí)線程
在開發(fā)程序時(shí),由于程序的需要而編寫的線程即用戶級(jí)線程擒抛,這些線程的創(chuàng)建推汽、執(zhí)行和消亡都是在編寫應(yīng)用程序時(shí)進(jìn)行控制的。對(duì)于用戶級(jí)別線程的切換歧沪,通常發(fā)生在一個(gè)應(yīng)用程序的諸多線程之間歹撒,如迅雷中的多線程下載就屬于用戶級(jí)線程。
多線程的優(yōu)勢(shì)
多線程可以帶來(lái)更好的用戶體驗(yàn)诊胞,避免因程序執(zhí)行過(guò)慢而導(dǎo)致出現(xiàn)計(jì)算機(jī)死機(jī)或者白屏的情況暖夭。
多線程程序可以最大限度地提高計(jì)算機(jī)系統(tǒng)的利用率,如迅雷的多線程下載撵孤。
編寫線程類
使用一個(gè)線程的過(guò)程有4個(gè)步驟:
定義一個(gè)線程迈着,同時(shí)指明這個(gè)線程所有執(zhí)行的代碼,即期望的完成的功能邪码。
創(chuàng)建線程對(duì)象裕菠。
啟動(dòng)線程。
終止線程闭专。
定義一個(gè)線程類通常有兩種方法奴潘,分別是繼承 java.lang.Thread 類和實(shí)現(xiàn) java.lang.Runnable 接口
使用 Thread 類創(chuàng)建線程
方? ? 法說(shuō)? ? ? 明
void run()執(zhí)行任務(wù)操作的方法
void start()使該線程開始執(zhí)行
void sleep(long millis)在指定的毫秒數(shù)內(nèi)讓當(dāng)前正在只想的線程休眠(暫停執(zhí)行)
String getName()返回該線程的名稱
int getPriority()返回線程的優(yōu)先級(jí)
void setPriority(int newPriority)更改線程的優(yōu)先級(jí)
Thread.State getState()返回該線程的狀態(tài)
boolean isAlive()測(cè)試線程是否處于活動(dòng)狀態(tài)
void join()等待該線程終止
void interrupt()中斷線程
void yield()暫停當(dāng)前正在執(zhí)行的線程對(duì)象,并執(zhí)行其他線程喻圃。
使用 Runnable 接口創(chuàng)建線程
定義類實(shí)現(xiàn) Runnable 接口,并實(shí)現(xiàn) Runnable 的 run() 方法粪滤,在 run() 方法中輸出數(shù)據(jù)斧拍。
創(chuàng)建線程對(duì)象
調(diào)用 start() 方法啟動(dòng)線程