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

正文內(nèi)容

《java程序設(shè)計(jì)之網(wǎng)絡(luò)編程》輸入輸出處理、線程ppt(文件)

2024-11-03 23:40 上一頁面

下一頁面
 

【正文】 end()使得線程進(jìn)入阻塞狀態(tài),并且不會(huì)自動(dòng)恢復(fù),必須其對應(yīng)的 resume() 被調(diào)用,才能使得線程重新進(jìn)入可執(zhí)行狀態(tài)。 而調(diào)用suspend方法后 , 線程將釋放占用的所有資源 , 由 JVM調(diào)度轉(zhuǎn)入臨時(shí)存儲(chǔ)空間 , 直至應(yīng)用程序調(diào)用 resume方法恢復(fù)線程運(yùn)行 。如果具有相同優(yōu)先級的其它線程是可運(yùn)行的, yield()將把調(diào)用線程放到可運(yùn)行池中并使另一個(gè)線程運(yùn)行。 在 時(shí)間片方式 下,當(dāng)前活動(dòng)線程執(zhí)行完當(dāng)前時(shí)間片后,如果有其他處于就緒狀態(tài)的相同優(yōu)先級的線程,系統(tǒng)會(huì)將執(zhí)行權(quán)交給其他就緒態(tài)的同優(yōu)先級線程;當(dāng)前活動(dòng)線程轉(zhuǎn)入等待執(zhí)行隊(duì)列,等待下一個(gè)時(shí)間片的調(diào)度。 數(shù)字越大表明線程的級別越高 。 這個(gè)線程具有最低的優(yōu)先級 , 用于為系統(tǒng)中的其它對象和線程提供服務(wù) 。 public TestThreadPriority(String strPara) { strMessage = strPara。 TestThreadPriority testThreadPriority2 = new TestThreadPriority(Thread2)。 (RIORITY)。i++) (()+is running!)。 public class Acount{ double balance。 public class AcountThread extends Thread { Acount acount。 } public void run(){ if( = 100){ try{ sleep(delay)。 } public static void main(String[] args) { Acount acount = new Acount(100)。 ()。從而使共享數(shù)據(jù) balance的完整性被破壞。通過為臨界代碼段設(shè)置信號燈,就可以保證資源的完整性,從而安全地訪問共享資源 互斥對象 為了實(shí)現(xiàn)這種機(jī)制 , Java語言提供以下兩方面的支持: 1 為每個(gè)對象設(shè)置了一個(gè) “ 互斥鎖 ” 標(biāo)記 。 int delay。 = semaphore。 } catch (InterruptedException e) { } } else (withdraw failed!)。 AcountThread2 acountThread2 = new AcountThread2(acount,0,semaphore)。 3) 把 synchronized放在取款方法的前面 線程同步 ? 在前面我們研究了共享資源的訪問問題 。 其約束條件為: 1) 生產(chǎn)者負(fù)責(zé)產(chǎn)品 , 并將其保存到倉庫中; 2) 消費(fèi)者從倉庫中取得產(chǎn)品 。 如在操作系統(tǒng)中的打印機(jī)調(diào)度問題 , 庫房的管理問題等 。 ? 利用這兩個(gè)方法 , 我們對上面的程序修改如下: 參見例子: 兩個(gè)線程之間的同步 兩個(gè)線程之間的同步(全部代碼) public class Acount4 { double balance。 }catch(InterruptedException e){ } balance = balance money。 } catch (InterruptedException e) { } balance = balance + money。 public AcountThread3(Acount2 acount) { = acount。 AcountThread3 acountThread32 = new AcountThread3(acount)。 我們前面舉例中數(shù)據(jù)共享也是線程的一種通信方式 。 一個(gè)線程充當(dāng)發(fā)送者 ,另一個(gè)線程充當(dāng)接收者 。 ? l 管道中的信息是嚴(yán)格按照發(fā)送的順序進(jìn)行傳送的 。 public SenderThread( ){ pipedWriter = new PipedWriter( )。i++){ try{ (i)。 在這種狀態(tài)下 , 各個(gè)線程互不相讓 ,永遠(yuǎn)進(jìn)入一種等待狀態(tài) 。 需要指出的事 , 線程死鎖并不是必然會(huì)發(fā)生 , 在某些情況下 , 可能會(huì)非常偶然 。 但是可能出現(xiàn)這樣一種情景:當(dāng)每個(gè)人都拿起自己左手邊的筷子 ,并同時(shí)去拿自己右手邊的筷子時(shí) , 會(huì)發(fā)生什么情況:五個(gè)人每人拿著一支筷子 , 盯著自己右手邊的那位哲學(xué)手里的一支筷子 , 處于僵持狀態(tài) 。 } } } 線程死鎖 ? 線程死鎖是并發(fā)程序設(shè)計(jì)中可能遇到的問題之一 。 } public void run( ){ for (int i =0。 ? 線程通訊參見 import .*。 ? l 管道通信是面向連接的 。 其結(jié)構(gòu)表示 。 ()。 } public static void main(String[] args) { Acount2 acount = new Acount2(100)。 notify()。 notify()。 (Totle Money: +balance)。 線程同步 ? wait()方法的語義是:當(dāng)一個(gè)線程執(zhí)行了該方法 , 則該線程進(jìn)入阻塞狀態(tài) , 同時(shí)讓出同步對象的互斥鎖 , 并自動(dòng)進(jìn)入互斥對象的等待隊(duì)列 。 ? 只有庫房中存在滿足數(shù)量的產(chǎn)品時(shí),消費(fèi)者才能取走產(chǎn)品,否則只能等待。 一個(gè)典型的應(yīng)用是稱之為生產(chǎn) 消費(fèi)者模型 。 ()。 Semaphore semaphore = new Semaphore()。 = 100。 public AcountThread2(Acount acount,int delay,Semaphore semaphore) { =acount。 該對象成為互斥對象 。我們首先回憶兩個(gè)概念。出錯(cuò)的原因在哪里呢? ? 由于線程 1在判斷滿足取錢的條件后,被線程 2打斷,還沒有來得及修改余額。 AcountThread acountThread2 = new AcountThread(acount,0)。 (withdraw 100 successful!)。 public AcountThread(Acount acount,int delay) { =acount。 (Totle Money: +balance)。 類 Acount代表一個(gè)銀行賬戶 。 } 線程調(diào)度和優(yōu)先級 public void run() { for(int i=0。 ()。 (RIORITY)。 典型的守護(hù)線程例子是 JVM中的系統(tǒng)資源自動(dòng)回收線程 , 它始終在低級別的狀態(tài)中運(yùn)行 , 用于實(shí)時(shí)監(jiān)控和管理系統(tǒng)中的可回收資源 。 當(dāng)一個(gè)線程對象被創(chuàng)建時(shí) , 其默認(rèn)的線程優(yōu)先級是 5。 ? 下面幾種情況下,當(dāng)前線程會(huì)放棄 CPU: 1. 線程調(diào)用了 yield() 或 sleep() 方法主動(dòng)放棄; 2. 由于當(dāng)前線程進(jìn)行 I/O 訪問,外存讀寫,等待用戶輸入等操作,導(dǎo)致線程阻塞;或者是為等候一個(gè)條件變量,以及線程調(diào)用 wait()方法; 3. 搶先式系統(tǒng)下,由高優(yōu)先級的線程參與調(diào)度;時(shí)間片方式下,當(dāng)前時(shí)間片用完,由同優(yōu)先級的線程參與調(diào)度。 ? 線程調(diào)度器按線程的優(yōu)先級高低選擇高優(yōu)先級線程(進(jìn)入運(yùn)行中狀態(tài))執(zhí)行,同時(shí)線程調(diào)度是 搶先式調(diào)度 ,即如果在當(dāng)前線程執(zhí)行過程中,一個(gè)更高優(yōu)先級的線程進(jìn)入可運(yùn)行狀態(tài),則這個(gè)線程立即被調(diào)度執(zhí)行。關(guān)于這兩個(gè)方法我們在 中將著重介紹。 在線程運(yùn)行過程中調(diào)用 sleep方法后 , 該線程在不釋放占用資源的情況下停止運(yùn)行指定的睡眠時(shí)間 。 ? sleep() 方法: sleep() 允許 指定以毫秒為單位的一段時(shí)間作為參數(shù) , 它使得線程在指定的時(shí)間內(nèi)進(jìn)入阻塞狀態(tài) , 不能得到 CPU 時(shí)間 , 指定的時(shí)間一過 ,線程重新進(jìn)入可執(zhí)行狀態(tài) 。 ? 參見例子 運(yùn)行結(jié)果如下: 創(chuàng)建線程 1 創(chuàng)建線程 2 創(chuàng)建線程 3 線程 1:計(jì)數(shù) 1 線程 1:計(jì)數(shù) 2 線程 1:計(jì)數(shù) 3 線程 1:計(jì)數(shù) 4 …… 線程 2:計(jì)數(shù) 5 創(chuàng)建線程 4 創(chuàng)建線程 5 線程 3:計(jì)數(shù) 1 線程 3:計(jì)數(shù) 2 線程 3:計(jì)數(shù) 3 …… 線程的生命周期及調(diào)度 ? ? 線程調(diào)度和優(yōu)先級 ? 線程是動(dòng)態(tài)的,具有一定的生命周期,分別經(jīng)歷從創(chuàng)建、執(zhí)行、阻塞直到消亡的過程。i3。 (創(chuàng)建線程 +number)。 但是 Runnable 接口并沒有任何對線程的支持 ,我們還必須創(chuàng)建 Thread 類的實(shí)例 , 這一點(diǎn)通過 Thread 類的構(gòu)造函數(shù) public Thread(Runnable target)。 i++) { count++。 i++) { count++。} public static void main(String[] args){// main方法開始 MyThread p = new MyThread(t1)。要?jiǎng)?chuàng)建一個(gè)線程,程序員必須創(chuàng)建一個(gè)從 Thread 類導(dǎo)出的新類。 創(chuàng)建線程兩種主要的方法:一種是繼承 Thread;另一種是實(shí)現(xiàn)接口 Runnable。兩個(gè)線程如果共享對一個(gè)公共對象的存取,則它們可以共享相同的數(shù)據(jù)。 4. 多線程:在同一應(yīng)用程序中,有多個(gè)順序流同時(shí)執(zhí)行。一個(gè)線程是一個(gè)程序內(nèi)部的順序控制流。 多線程意味著一個(gè)程序的多行語句可以看上去幾乎在同一時(shí)間內(nèi)同時(shí)運(yùn)行。一般可以在同一時(shí)間內(nèi)執(zhí)行多個(gè)程序的操作系統(tǒng)都有進(jìn)程的概念。 ObjectOutputStream oout = new ObjectOutputStream(fout)。 Serializable接口沒有定義任何成員。對象通過寫出描述自己狀態(tài)的數(shù)值來記錄自己的過程,叫做對象的 串行化 ( Serialization)。 OutputStreamWriter osw = new OutputStreamWriter(fout, GBK)。 InputStreamReader ? public InputStreamReader(InputStream in) ? public InputStreamReader(InputStream in, String charsetName) throws UnsupportedEncodingException ? public InputStreamReader(InputStream in, Charset cs) ? public InputStreamReader(InputStream in, CharsetDecoder dec) File file = new File(src/)。一般字符由多個(gè)字節(jié)組成。 Reader類的方法 ? abstract void close( ) ? void mark(int numChars) ? boolean markSupported( ) ? int read( ) ? int read(char buffer[ ]) ? abstract int read(char b[ ],int offset,int len ) ? boolean ready( ) ? void reset( ) ? long skip(long n) Writer類的方法 ? abstract void close( ) ? abstract void flush( ) ? void write(int ch) ? void write(char buffer[ ]) ? abstract void write(char b[ ],int offset,int len) ? void write(String str) ? void write(String str, int offset,int len) ? public Writer append(char c) ? public Writer append(CharSequence csq) ? publ
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1