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

正文內(nèi)容

第八章線程-資料下載頁

2024-10-24 14:09本頁面

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

  

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