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

正文內(nèi)容

java程序設(shè)計之網(wǎng)絡(luò)編程輸入輸出處理、線程ppt(參考版)

2024-10-19 23:40本頁面
  

【正文】 需要指出的事 , 線程死鎖并不是必然會發(fā)生 , 在某些情況下 , 可能會非常偶然 。 但是可能出現(xiàn)這樣一種情景:當每個人都拿起自己左手邊的筷子 ,并同時去拿自己右手邊的筷子時 , 會發(fā)生什么情況:五個人每人拿著一支筷子 , 盯著自己右手邊的那位哲學手里的一支筷子 , 處于僵持狀態(tài) 。 在這種狀態(tài)下 , 各個線程互不相讓 ,永遠進入一種等待狀態(tài) 。 } } } 線程死鎖 ? 線程死鎖是并發(fā)程序設(shè)計中可能遇到的問題之一 。i++){ try{ (i)。 } public void run( ){ for (int i =0。 public SenderThread( ){ pipedWriter = new PipedWriter( )。 ? 線程通訊參見 import .*。 ? l 管道中的信息是嚴格按照發(fā)送的順序進行傳送的 。 ? l 管道通信是面向連接的 。 一個線程充當發(fā)送者 ,另一個線程充當接收者 。 其結(jié)構(gòu)表示 。 我們前面舉例中數(shù)據(jù)共享也是線程的一種通信方式 。 ()。 AcountThread3 acountThread32 = new AcountThread3(acount)。 } public static void main(String[] args) { Acount2 acount = new Acount2(100)。 public AcountThread3(Acount2 acount) { = acount。 notify()。 } catch (InterruptedException e) { } balance = balance + money。 notify()。 }catch(InterruptedException e){ } balance = balance money。 (Totle Money: +balance)。 ? 利用這兩個方法 , 我們對上面的程序修改如下: 參見例子: 兩個線程之間的同步 兩個線程之間的同步(全部代碼) public class Acount4 { double balance。 線程同步 ? wait()方法的語義是:當一個線程執(zhí)行了該方法 , 則該線程進入阻塞狀態(tài) , 同時讓出同步對象的互斥鎖 , 并自動進入互斥對象的等待隊列 。 如在操作系統(tǒng)中的打印機調(diào)度問題 , 庫房的管理問題等 。 ? 只有庫房中存在滿足數(shù)量的產(chǎn)品時,消費者才能取走產(chǎn)品,否則只能等待。 其約束條件為: 1) 生產(chǎn)者負責產(chǎn)品 , 并將其保存到倉庫中; 2) 消費者從倉庫中取得產(chǎn)品 。 一個典型的應(yīng)用是稱之為生產(chǎn) 消費者模型 。 3) 把 synchronized放在取款方法的前面 線程同步 ? 在前面我們研究了共享資源的訪問問題 。 ()。 AcountThread2 acountThread2 = new AcountThread2(acount,0,semaphore)。 Semaphore semaphore = new Semaphore()。 } catch (InterruptedException e) { } } else (withdraw failed!)。 = 100。 = semaphore。 public AcountThread2(Acount acount,int delay,Semaphore semaphore) { =acount。 int delay。 該對象成為互斥對象 。通過為臨界代碼段設(shè)置信號燈,就可以保證資源的完整性,從而安全地訪問共享資源 互斥對象 為了實現(xiàn)這種機制 , Java語言提供以下兩方面的支持: 1 為每個對象設(shè)置了一個 “ 互斥鎖 ” 標記 。我們首先回憶兩個概念。從而使共享數(shù)據(jù) balance的完整性被破壞。出錯的原因在哪里呢? ? 由于線程 1在判斷滿足取錢的條件后,被線程 2打斷,還沒有來得及修改余額。 ()。 AcountThread acountThread2 = new AcountThread(acount,0)。 } public static void main(String[] args) { Acount acount = new Acount(100)。 (withdraw 100 successful!)。 } public void run(){ if( = 100){ try{ sleep(delay)。 public AcountThread(Acount acount,int delay) { =acount。 public class AcountThread extends Thread { Acount acount。 (Totle Money: +balance)。 public class Acount{ double balance。 類 Acount代表一個銀行賬戶 。i++) (()+is running!)。 } 線程調(diào)度和優(yōu)先級 public void run() { for(int i=0。 (RIORITY)。 ()。 TestThreadPriority testThreadPriority2 = new TestThreadPriority(Thread2)。 (RIORITY)。 public TestThreadPriority(String strPara) { strMessage = strPara。 典型的守護線程例子是 JVM中的系統(tǒng)資源自動回收線程 , 它始終在低級別的狀態(tài)中運行 , 用于實時監(jiān)控和管理系統(tǒng)中的可回收資源 。 這個線程具有最低的優(yōu)先級 , 用于為系統(tǒng)中的其它對象和線程提供服務(wù) 。 當一個線程對象被創(chuàng)建時 , 其默認的線程優(yōu)先級是 5。 數(shù)字越大表明線程的級別越高 。 ? 下面幾種情況下,當前線程會放棄 CPU: 1. 線程調(diào)用了 yield() 或 sleep() 方法主動放棄; 2. 由于當前線程進行 I/O 訪問,外存讀寫,等待用戶輸入等操作,導致線程阻塞;或者是為等候一個條件變量,以及線程調(diào)用 wait()方法; 3. 搶先式系統(tǒng)下,由高優(yōu)先級的線程參與調(diào)度;時間片方式下,當前時間片用完,由同優(yōu)先級的線程參與調(diào)度。 在 時間片方式 下,當前活動線程執(zhí)行完當前時間片后,如果有其他處于就緒狀態(tài)的相同優(yōu)先級的線程,系統(tǒng)會將執(zhí)行權(quán)交給其他就緒態(tài)的同優(yōu)先級線程;當前活動線程轉(zhuǎn)入等待執(zhí)行隊列,等待下一個時間片的調(diào)度。 ? 線程調(diào)度器按線程的優(yōu)先級高低選擇高優(yōu)先級線程(進入運行中狀態(tài))執(zhí)行,同時線程調(diào)度是 搶先式調(diào)度 ,即如果在當前線程執(zhí)行過程中,一個更高優(yōu)先級的線程進入可運行狀態(tài),則這個線程立即被調(diào)度執(zhí)行。如果具有相同優(yōu)先級的其它線程是可運行的, yield()將把調(diào)用線程放到可運行池中并使另一個線程運行。關(guān)于這兩個方法我們在 中將著重介紹。 而調(diào)用suspend方法后 , 線程將釋放占用的所有資源 , 由 JVM調(diào)度轉(zhuǎn)入臨時存儲空間 , 直至應(yīng)用程序調(diào)用 resume方法恢復(fù)線程運行 。 在線程運行過程中調(diào)用 sleep方法后 , 該線程在不釋放占用資源的情況下停止運行指定的睡眠時間 。 ? suspend() 和 resume() 方法:兩個方法配套使用,suspend()使得線程進入阻塞狀態(tài),并且不會自動恢復(fù),必須其對應(yīng)的 resume() 被調(diào)用,才能使得線程重新進入可執(zhí)行狀態(tài)。 ? sleep() 方法: sleep() 允許 指定以毫秒為單位的一段時間作為參數(shù) , 它使得線程在指定的時間內(nèi)進入阻塞狀態(tài) , 不能得到 CPU 時間 , 指定的時間一過 ,線程重新進入可執(zhí)行狀態(tài) 。按照線程體在計算機系統(tǒng)內(nèi)存中的狀態(tài)不同,可以將線程分為創(chuàng)建 (new)、就緒(runnable)、運行、阻塞( blocked)和死亡( dead) 5個狀態(tài), NewRunningRunnableOtherwise BlockedDeadBlocked in object`swait() poolBlocked in object`s lock poolSchedulerpletesrun()start()sleep() or join()sleep() timeout or thread join()s or interupt ()interupt ()notify()Lockavailablesynchronized()Thread states ? 在狀態(tài)轉(zhuǎn)換的各個過程中 , 最關(guān)鍵也是最復(fù)雜的就是就緒狀態(tài)和阻塞狀態(tài)轉(zhuǎn)換的過程 。 ? 參見例子 運行結(jié)果如下: 創(chuàng)建線程 1 創(chuàng)建線程 2 創(chuàng)建線程 3 線程 1:計數(shù) 1 線程 1:計數(shù) 2 線程 1:計數(shù) 3 線程 1:計數(shù) 4 …… 線程 2:計數(shù) 5 創(chuàng)建線程 4 創(chuàng)建線程 5 線程 3:計數(shù) 1 線程 3:計數(shù) 2 線程 3:計數(shù) 3 …… 線程的生命周期及調(diào)度 ? ? 線程調(diào)度和優(yōu)先級 ? 線程是動態(tài)的,具有一定的生命周期,分別經(jīng)歷從創(chuàng)建、執(zhí)行、阻塞直到消亡的過程。 ()。i3。 if(++count==3) return。 (創(chuàng)建線程 +number)。 下面是使用這一方法的示例程序: 通過實現(xiàn)接口創(chuàng)建線程 public class MyThread2 implements Runnable{ int count=1,number。 但是 Runnable 接口并沒有任何對線程的支持 ,我們還必須創(chuàng)建 Thread 類的實例 , 這一點通過 Thread 類的構(gòu)造函數(shù) public Thread(Runnable target)。 } } } ? 參見例子 第 1次運行: 1: main 2: main 3: main 4: main 5: main 6:t1 7:t1 8:t1 9:t1 10:t1 第 2次運行 …… 101: main 102: main 103: main 104:t1 105: main 106:t1 107: main 108:t1 109:t1 …… 通過實現(xiàn)接口創(chuàng)建線程 ? 該方法通過生成實現(xiàn) 接口的類 。 i++) { count++。 } } public void run() {// 線程類必須有的 run()方法 for (int i = 0。 i++) { count++。 // 執(zhí)行線程 // 主線程 main方法執(zhí)行一個循環(huán) for (int i = 0。} public static void main(String[] args){// main方法開始 MyThread p = new MyThread(t1)。 采用繼承創(chuàng)建線程 public class MyThread extends Thread { // count變量用于統(tǒng)計打印的次數(shù)并共享變量 private static int count = 0。要創(chuàng)建一個線程,程序員必須創(chuàng)建一個從 Thread 類導出的新類。 下面介紹: Thread類的常用方法,參見 JDK API 采用繼承創(chuàng)建線程 ? 該方法比較簡單,主要是通過繼承,并覆蓋 Thread類的run()方法來完成線成的創(chuàng)建。 創(chuàng)建線程兩種主要的方法:一種是繼承 Thread;另一種是實現(xiàn)
點擊復(fù)制文檔內(nèi)容
教學課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1