freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

第八章線(xiàn)程-資料下載頁(yè)

2024-10-24 14:09本頁(yè)面

【導(dǎo)讀】進(jìn)程和線(xiàn)程的區(qū)別。用字處理軟件編輯文稿時(shí),同時(shí)打開(kāi)mp3播放程序聽(tīng)音樂(lè),可以產(chǎn)生一個(gè)新的線(xiàn)程。這個(gè)子類(lèi)應(yīng)該重寫(xiě)Thread類(lèi)的。這個(gè)子類(lèi)的對(duì)象需要調(diào)用start方法來(lái)啟動(dòng),新線(xiàn)程。將自動(dòng)進(jìn)入run方法。原線(xiàn)程將同時(shí)繼續(xù)往下執(zhí)行。–Thread類(lèi)直接繼承了Object類(lèi),并實(shí)現(xiàn)了Runnable接口。在新線(xiàn)程中完成計(jì)算某個(gè)整數(shù)的階乘。不失去已獲得的鎖旗標(biāo)。均為后臺(tái)線(xiàn)程則JVM停止運(yùn)行。

  

【正文】 sleep方法而進(jìn)入休眠 ? 死亡狀態(tài) – 線(xiàn)程已完成或退出 線(xiàn)程的幾種基本狀態(tài) (續(xù) ) 線(xiàn)程的生命周期 57 死鎖問(wèn)題 ? 死鎖 – 線(xiàn)程在運(yùn)行過(guò)程中,其中某個(gè)步驟往往需要滿(mǎn)足一些條件才能繼續(xù)進(jìn)行下去,如果這個(gè)條件不能滿(mǎn)足,線(xiàn)程將在這個(gè)步驟上出現(xiàn)阻塞 – 線(xiàn)程 A可能會(huì)陷于對(duì)線(xiàn)程 B的等待,而線(xiàn)程 B同樣陷于對(duì)線(xiàn)程 C的等待,依次類(lèi)推,整個(gè)等待鏈最后又可能回到線(xiàn)程 A。如此一來(lái)便陷入一個(gè)彼此等待的輪回中,任何線(xiàn)程都動(dòng)彈不得,此即所謂死鎖( deadlock) – 對(duì)于死鎖問(wèn)題,關(guān)鍵不在于出現(xiàn)問(wèn)題后調(diào)試,而是在于預(yù)防 線(xiàn)程的生命周期 62 控制線(xiàn)程的生命 ? 結(jié)束線(xiàn)程的生命 – 用 stop方法可以結(jié)束線(xiàn)程的生命 ? 但如果一個(gè)線(xiàn)程正在操作共享數(shù)據(jù)段,操作過(guò)程沒(méi)有完成就用 stop結(jié)束的話(huà),將會(huì)導(dǎo)致數(shù)據(jù)的不完整,因此并不提倡使用此方法 – 通常,可通過(guò)控制 run方法中循環(huán)條件的方式來(lái)結(jié)束一個(gè)線(xiàn)程 線(xiàn)程的生命周期 63 ? 線(xiàn)程不斷顯示遞增整數(shù),按下回車(chē)鍵則停止執(zhí)行 import .*。 public class Ex8_12{ public static void main(String[] args) throws IOException{ TestThread t=new TestThread()。 ()。 new BufferedReader(new InputStreamReader()) .readLine()。 //等待鍵盤(pán)輸入 ()。 //調(diào)用 stopme方法結(jié)束 t線(xiàn)程 } } 控制線(xiàn)程的生命 (續(xù) ) —— 例 8_12 線(xiàn)程的生命周期 64 class TestThread extends Thread{ private boolean flag=true。 public void stopme() { //在此方法中控制循環(huán)條件 flag=false。 } public void run() { int i=0。 while(flag) { (i++)。 //如果 flag為真則一直顯示遞增整數(shù) } } } ? 運(yùn)行效果為按下回車(chē)鍵后則停止顯示 控制線(xiàn)程的生命 (續(xù) ) —— 例 8_12 線(xiàn)程的生命周期 65 線(xiàn)程的優(yōu)先級(jí) ? 線(xiàn)程調(diào)度 – 在單 CPU的系統(tǒng)中,多個(gè)線(xiàn)程需要共享 CPU,在任何時(shí)間點(diǎn)上實(shí)際只能有一個(gè)線(xiàn)程在運(yùn)行 – 控制多個(gè)線(xiàn)程在同一個(gè) CPU上以某種順序運(yùn)行稱(chēng)為線(xiàn)程調(diào)度 – Java虛擬機(jī)支持一種非常簡(jiǎn)單的、確定的調(diào)度算法,叫做固定優(yōu)先級(jí)算法。這個(gè)算法基于線(xiàn)程的優(yōu)先級(jí)對(duì)其進(jìn)行調(diào)度 66 ? 線(xiàn)程的優(yōu)先級(jí) – 每個(gè) Java線(xiàn)程都有一個(gè)優(yōu)先級(jí),其范圍都在 1和10之間。默認(rèn)情況下,每個(gè)線(xiàn)程的優(yōu)先級(jí)都設(shè)置為 5 – 在線(xiàn)程 A運(yùn)行過(guò)程中創(chuàng)建的新的線(xiàn)程對(duì)象 B,初始狀態(tài)具有和線(xiàn)程 A相同的優(yōu)先級(jí) – 如果 A是個(gè)后臺(tái)線(xiàn)程,則 B也是個(gè)后臺(tái)線(xiàn)程 – 可在線(xiàn)程創(chuàng)建之后的任何時(shí)候,通過(guò) setPriority(int priority)方法改變其原來(lái)的優(yōu)先級(jí) 線(xiàn)程的優(yōu)先級(jí) (續(xù) ) 線(xiàn)程的優(yōu)先級(jí) 67 ? 基于線(xiàn)程優(yōu)先級(jí)的線(xiàn)程調(diào)度 – 具有較高優(yōu)先級(jí)的線(xiàn)程比優(yōu)先級(jí)較低的線(xiàn)程優(yōu)先執(zhí)行 – 對(duì)具有相同優(yōu)先級(jí)的線(xiàn)程, Java的處理是隨機(jī)的 – 底層操作系統(tǒng)支持的優(yōu)先級(jí)可能要少于 10個(gè),這樣會(huì)造成一些混亂。因此,只能將優(yōu)先級(jí)作為一種很粗略的工具使用。最后的控制可以通過(guò)明智地使用 yield()函數(shù)來(lái)完成 – 我們只能基于效率的考慮來(lái)使用線(xiàn)程優(yōu)先級(jí),而不能依靠線(xiàn)程優(yōu)先級(jí)來(lái)保證算法的正確性 線(xiàn)程的優(yōu)先級(jí) (續(xù) ) 線(xiàn)程的優(yōu)先級(jí) 68 ? 假設(shè)某線(xiàn)程正在運(yùn)行,則只有出現(xiàn)以下情況之一,才會(huì)使其暫停運(yùn)行 – 一個(gè)具有更高優(yōu)先級(jí)的線(xiàn)程變?yōu)榫途w狀態(tài)( Ready); – 由于輸入 /輸出(或其他一些原因)、調(diào)用 sleep、 wait、yield方法使其發(fā)生阻塞; – 對(duì)于支持時(shí)間分片的系統(tǒng),時(shí)間片的時(shí)間期滿(mǎn) 線(xiàn)程的優(yōu)先級(jí) (續(xù) ) 線(xiàn)程的優(yōu)先級(jí) 69 ? 創(chuàng)建兩個(gè)具有不同優(yōu)先級(jí)的線(xiàn)程,都從 1遞增到400000,每增加 50000顯示一次 public class Ex8_13{ public static void main(String[] args) { TestThread[] runners = new TestThread[2]。 for (int i = 0。 i 2。 i++) runners[i] = new TestThread(i)。 runners[0].setPriority(2)。 //設(shè)置第一個(gè)線(xiàn)程優(yōu)先級(jí)為 2 runners[1].setPriority(3)。 //設(shè)置第二個(gè)線(xiàn)程優(yōu)先級(jí)為 3 for (int i = 0。 i 2。 i++) runners[i].start()。 } } 8. 3 線(xiàn)程的優(yōu)先級(jí) (續(xù) ) —— 例 8_13 線(xiàn)程的優(yōu)先級(jí) 70 class TestThread extends Thread{ private int tick = 1。 private int num。 public TestThread(int i) { =i。 } public void run() { while (tick 400000) { tick++。 if ((tick % 50000) == 0) { //每隔 5000進(jìn)行顯示 (Thread + num + , tick = + tick)。 yield()。 //放棄執(zhí)行權(quán) } } } } 8. 3 線(xiàn)程的優(yōu)先級(jí) (續(xù) ) —— 例 8_13 線(xiàn)程的優(yōu)先級(jí) 71 8. 3 線(xiàn)程的優(yōu)先級(jí) (續(xù) ) —— 例 8_13運(yùn)行結(jié)果 ? 運(yùn)行結(jié)果 Thread 1, tick = 50000 Thread 1, tick = 100000 Thread 1, tick = 150000 Thread 1, tick = 202000 Thread 1, tick = 250000 Thread 1, tick = 300000 Thread 1, tick = 350000 Thread 1, tick = 400000 Thread 0, tick = 50000 Thread 0, tick = 100000 Thread 0, tick = 150000 Thread 0, tick = 202000 Thread 0, tick = 250000 Thread 0, tick = 300000 Thread 0, tick = 350000 Thread 0, tick = 400000 ? 結(jié)果說(shuō)明 – 具有較高優(yōu)先級(jí)的線(xiàn)程1一直運(yùn)行到結(jié)束,具有較低優(yōu)先級(jí)的線(xiàn)程 0才開(kāi)始運(yùn)行 – 雖然具有較高優(yōu)先級(jí)的線(xiàn)程 1調(diào)用了 yield方法放棄 CPU資源,允許線(xiàn)程 0進(jìn)行爭(zhēng)奪,但馬上又被線(xiàn)程 1搶奪了回去,所以有沒(méi)有 yield方法都沒(méi)什么區(qū)別 線(xiàn)程的優(yōu)先級(jí) 72 ? 如果在 yield方法后增加一行 sleep語(yǔ)句,讓線(xiàn)程 1暫時(shí)放棄一下在 CPU上的運(yùn)行,哪怕是 1毫秒,則線(xiàn)程0也可以有機(jī)會(huì)被調(diào)度。修改后的 run方法如下 public void run() { while (tick 400000) { tick++。 if ((tick % 50000) == 0) { (Thread + num + , tick = + tick)。 yield()。 try{ sleep(1)。}catch(Exception e){}。 } } } 8. 3 線(xiàn)程的優(yōu)先級(jí) (續(xù) ) —— 例 8_13修改 線(xiàn)程的優(yōu)先級(jí) 73 8. 3 線(xiàn)程的優(yōu)先級(jí) (續(xù) ) —— 例 8_13修改后運(yùn)行結(jié)果 ? 運(yùn)行結(jié)果 Thread 1, tick = 50000 Thread 1, tick = 100000 Thread 1, tick = 150000 Thread 1, tick = 202000 Thread 0, tick = 50000 Thread 1, tick = 250000 Thread 1, tick = 300000 Thread 0, tick = 100000 Thread 1, tick = 350000 Thread 1, tick = 400000 Thread 0, tick = 150000 Thread 0, tick = 202000 Thread 0, tick = 250000 Thread 0, tick = 300000 Thread 0, tick = 350000 Thread 0, tick = 400000 ? 說(shuō)明 – 具有較低優(yōu)先權(quán)的線(xiàn)程 0在線(xiàn)程 1沒(méi)有執(zhí)行完畢前也獲得了一部分執(zhí)行,但線(xiàn)程 1還是優(yōu)先完成了執(zhí)行 – Java虛擬機(jī)本身并不支持某個(gè)線(xiàn)程搶奪另一個(gè)正在執(zhí)行的具有同等優(yōu)先級(jí)線(xiàn)程的執(zhí)行權(quán) – 通常,我們?cè)谝粋€(gè)線(xiàn)程內(nèi)部插入 yield()語(yǔ)句,這個(gè)方法會(huì)使正在運(yùn)行的線(xiàn)程暫時(shí)放棄執(zhí)行,這是具有同樣優(yōu)先級(jí)的線(xiàn)程就有機(jī)會(huì)獲得調(diào)度開(kāi)始運(yùn)行,但較低優(yōu)先級(jí)的線(xiàn)程仍將被忽略不參加調(diào)度 線(xiàn)程的優(yōu)先級(jí) 74 本章小結(jié) ? 本章內(nèi)容 – 線(xiàn)程的基礎(chǔ)知識(shí) – 線(xiàn)程的生命周期 – 線(xiàn)程的優(yōu)先級(jí) ? 本章要求 – 了解線(xiàn)程的概念 – 學(xué)會(huì)如何通過(guò) Thread類(lèi)和 Runnable接口創(chuàng)建線(xiàn)程,如何實(shí)現(xiàn)多線(xiàn)程的資源共享和通信,及如何控制線(xiàn)程的生命 – 掌握線(xiàn)程同步的方法 – 理解線(xiàn)程優(yōu)先級(jí)的概念,以及基于優(yōu)先級(jí)的線(xiàn)程調(diào)度
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1