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

正文內(nèi)容

第八章線程(完整版)

2024-12-11 14:09上一頁面

下一頁面
  

【正文】 ava是第一個(gè)支持內(nèi)置線程操作的主流編程語言 – 多數(shù)程序設(shè)計(jì)語言支持多線程要借助于操作系統(tǒng)“原語(primitives)” 線程的概念 (續(xù) ) 多線程編程基礎(chǔ) 6 Thread類 ? Thread類 – 在 Java程序中創(chuàng)建多線程的方法之一是繼承 Thread類 – 封裝了 Java程序中一個(gè)線程對(duì)象需要擁有的屬性和方法 – 從 Thread類派生一個(gè)子類,并創(chuàng)建這個(gè)子類的對(duì)象,就可以產(chǎn)生一個(gè)新的線程。 } } class FactorialThread extends Thread { private int num。 (new thread ends)。這個(gè)方法必須在 start()方法前使用 public final void checkAccess() 判斷當(dāng)前線程是否有權(quán)力修改調(diào)用此方法的線程 public void setName(String name) 更該本線程的名稱為指定參數(shù) public final boolean isAlive() 測試線程是否處于活動(dòng)狀態(tài),如果線程被啟動(dòng)并且沒有死亡則返回 true Thread類 (續(xù) ) —— 常用 API函數(shù) 多線程編程基礎(chǔ) 14 ? 創(chuàng)建 3個(gè)新線程,每個(gè)線程睡眠一段時(shí)間( 0~ 6秒),然后結(jié)束 public class Ex8_2 { public static void main( String [] args ) { //創(chuàng)建并命名每個(gè)線程 TestThread thread1 = new TestThread( thread1 )。 } } Thread類 (續(xù) ) —— 例 8_2 多線程編程基礎(chǔ) 15 class TestThread extends Thread { private int sleepTime。 new Thread(t).start()。 } (The factorial of +num+ is +result)。 new Thread(thread3,Thread3).start()。 } } Runnable接口 (續(xù) ) —— 例 8_4 多線程編程基礎(chǔ) 22 線程間的數(shù)據(jù)共享 ? 代碼共享 – 多個(gè)線程的執(zhí)行代碼來自同一個(gè)類的 run方法時(shí),即稱它們共享相同的代碼 ? 數(shù)據(jù)共享 – 當(dāng)共享訪問相同的對(duì)象時(shí),即它們共享相同的數(shù)據(jù) – 使用 Runnable接口可以輕松實(shí)現(xiàn)多個(gè)線程共享相同數(shù)據(jù),只要用同一個(gè)實(shí)現(xiàn)了 Runnable接口的實(shí)例作為參數(shù)創(chuàng)建多個(gè)線程就可以了 多線程編程基礎(chǔ) 23 ? 修改例 8_4,只用一個(gè) Runnable類型的對(duì)象為參數(shù)創(chuàng)建 3個(gè)新線程。 public TestThread() { sleepTime = ( int ) ( () * 6000 )。 new Thread(t).start()。 } } 多線程的同步控制 (續(xù) ) —— 例 8_7 多線程編程基礎(chǔ) 32 class Tickets { int number=0。 } } } 多線程的同步控制 (續(xù) ) —— 例 8_7 多線程編程基礎(chǔ) 34 class Consumer extends Thread //售票線程 { Tickets t=null。再次切換到售票線程后,售票線程執(zhí)行 =false。例如: ? synchronized(對(duì)象) { 代碼段 } – synchronized的功能是:首先判斷對(duì)象的鎖旗標(biāo)是否在,如果在就獲得鎖旗標(biāo),然后就可以執(zhí)行緊隨其后的代碼段;如果對(duì)象的鎖旗標(biāo)不在(已被其他線程拿走),就進(jìn)入等待狀態(tài),直到獲得鎖旗標(biāo) – 當(dāng)被 synchronized限定的代碼段執(zhí)行完,就釋放鎖旗標(biāo) 多線程的同步控制 (續(xù) ) —— synchronized關(guān)鍵字 多線程編程基礎(chǔ) 41 ? 將需要互斥的語句段放入 synchronized(object){}語句框中,且兩處的 object是相同的 class Producer extends Thread { Tickets t=null。 } public void run() { while(i) { synchronized(t) { //申請對(duì)象 t的鎖旗標(biāo) if(==true amp。直到該對(duì)象的鎖旗標(biāo)被歸還,池中的等待線程才能重新去獲得鎖旗標(biāo),然后繼續(xù)執(zhí)行下去 – 除了可以對(duì)指定的代碼段進(jìn)行同步控制之外,還可以 定義整個(gè)方法在同步控制下執(zhí)行,只要在方法定義前加上synchronized關(guān)鍵字即可 多線程的同步控制 (續(xù) ) —— synchronized關(guān)鍵字 多線程編程基礎(chǔ) 44 ? 實(shí)現(xiàn)例 8_7功能。 } public synchronized void sell() { //同步方法,實(shí)現(xiàn)售票的功能 if(available==true amp。線程 A要一直等到其他線程在對(duì)象 x上調(diào)用 notify或notifyAll方法,才能夠在重新獲得對(duì)象 x的鎖旗標(biāo)后繼續(xù)執(zhí)行(從 wait語句后繼續(xù)執(zhí)行) 多線程編程基礎(chǔ) 47 線程之間的通信 (續(xù) ) —— notify()和 notifyAll()方法 – notify() 隨機(jī)喚醒一個(gè)等待的線程,本線程繼續(xù)執(zhí)行 ? 線程被喚醒以后,還要等發(fā)出喚醒消息者釋放監(jiān)視器,這期間關(guān)鍵數(shù)據(jù)仍可能被改變 ? 被喚醒的線程開始執(zhí)行時(shí),一定要判斷當(dāng)前狀態(tài)是否適合自己運(yùn)行 – notifyAll() 喚醒所有等待的線程,本線程繼續(xù)執(zhí)行 多線程編程基礎(chǔ) 48 ? 修改例 8_8,使每存入一張票,就售一張票,售出后,再存入 class Tickets { …… public synchronized void put() { if(available) //如果還有存票待售,則存票線程等待 try{ wait()。 //售票后喚醒存票線程開始存票 if (number==size) number=size+1 。 (true)。 //調(diào)用 stopme方法結(jié)束 t線程 } } 控制線程的生命 (續(xù) ) —— 例 8_12 線程的生命周期 64 class TestThread extends Thread{ private boolean flag=true。最后的控制可以通過明智地使用 yield()函數(shù)來完成 – 我們只能基于效率的考慮來使用線程優(yōu)先級(jí),而不能依靠線程優(yōu)先級(jí)來保證算法的正確性 線程的優(yōu)先級(jí) (續(xù) ) 線程的優(yōu)先級(jí) 68 ? 假設(shè)某線程正在運(yùn)行,則只有出現(xiàn)以下情況之一,才會(huì)使其暫停運(yùn)行 – 一個(gè)具有更高優(yōu)先級(jí)的線程變?yōu)榫途w狀態(tài)( Ready); – 由于輸入 /輸出(或其他一些原因)、調(diào)用 sleep、 wait、yield方法使其發(fā)生阻塞; – 對(duì)于支持時(shí)間分片的系統(tǒng),時(shí)間片的時(shí)間期滿 線程的優(yōu)先級(jí) (續(xù) ) 線程的優(yōu)先級(jí) 69 ? 創(chuàng)建兩個(gè)具有不同優(yōu)先級(jí)的線程,都從 1遞增到400000,每增加 50000顯示一次 public class Ex8_13{ public static void main(String[] args) { TestThread[] runners = new TestThread[2]。 i++) runners[i].start()。修改后的 run方法如下 public void run() { while (tick 400000) { tick++。 yield()。 private int num。 i 2。 } public void run() { int i=0。 } } class ThreadTest extends Thread { public void run() { while(true){} } } ? 運(yùn)行程序,則發(fā)現(xiàn)整個(gè)程序在主線程結(jié)束時(shí)就隨之中止運(yùn)行了,如果注釋掉 (true)語句,則程序永遠(yuǎn)不會(huì)結(jié)束 后臺(tái)線程 (續(xù) ) —— 例 8_10 多線程編程基礎(chǔ) 54 線程的生命周期 ? 線程的生命周期 – 線程從產(chǎn)生到消亡的過程 – 一個(gè)線程在任何時(shí)刻都處于某種線程狀態(tài)( thread state) 55 線程的幾種基本狀態(tài) ? 線程生命周期狀態(tài)圖 線程調(diào)度 ru n () 完成 時(shí)間到 s y n c h ro n iz e d未獲得鎖旗標(biāo) n o tif y () w a it() s le e p () 獲得鎖旗標(biāo) s ta rt() 就緒狀態(tài) 新線程 阻塞 ( 休眠 ) 阻塞 ( 進(jìn)入對(duì)象 lo c k 池 ) 運(yùn)行狀態(tài) 阻塞 ( 進(jìn)入對(duì)象 w a it 池 ) 死亡狀態(tài) 線程的生命周期 56 ? 誕生狀態(tài) – 線程剛剛被創(chuàng)建 ? 就緒狀態(tài) – 線程的 start 方法已被執(zhí)行 – 線程已準(zhǔn)備好運(yùn)行 ? 運(yùn)行狀態(tài) – 處理機(jī)分配給了線程,線程正在運(yùn)行 ? 阻塞狀態(tài)( Blocked) – 在線程發(fā)出輸入 /輸出請求且必須等待其返回 – 遇到用 synchronized標(biāo)記的方法而未獲得其監(jiān)視器暫時(shí)不能進(jìn)入執(zhí)行時(shí) ? 休眠狀態(tài)( Sleeping) – 執(zhí)行 sleep方法而進(jìn)入休眠 ? 死亡狀態(tài) – 線程已完成或退出 線程的幾種基本狀態(tài) (續(xù) ) 線程的生命周期 57 死鎖問題 ? 死鎖 – 線程在運(yùn)行過程中,其中某個(gè)步驟往往需要滿足一些條件才能繼續(xù)進(jìn)行下去,如果這個(gè)條件不能滿足,線程將在這個(gè)步驟上出現(xiàn)阻塞 – 線程 A可能會(huì)陷于對(duì)線程 B的等待,而線程 B同樣陷于對(duì)線程 C的等待,依次類推,整個(gè)等待鏈最后又可能回到線程 A。 public Producer(Tickets t) {
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1