




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
項目七多線程與I/O文件流Java程序設(shè)計一、Java多線程機(jī)制Java程序設(shè)計
1.多線程概念多線程機(jī)制是Java語言的又一重要特征,使用多線程技術(shù)可以使系統(tǒng)同時運行多個執(zhí)行體,加快程序的響應(yīng)時間,提高計算機(jī)資源的利用率。使用多線程技術(shù)可以提高整個應(yīng)用系統(tǒng)的性能。
2.程序、進(jìn)程與線程的區(qū)別:程序是一段靜態(tài)的代碼,它是應(yīng)用軟件執(zhí)行的藍(lán)本。進(jìn)程是程序的一次動態(tài)執(zhí)行過程,它對應(yīng)了從代碼加載、執(zhí)行至執(zhí)行完畢的一個完整過程,這個過程也是進(jìn)程本身從產(chǎn)生、發(fā)展至消亡的過程。線程是比進(jìn)程更小的執(zhí)行單位,一個進(jìn)程在其執(zhí)行過程中,可以產(chǎn)生多個線程,形成多條執(zhí)行線索,每條線索,即每個線程也有它自身的產(chǎn)生、存在和消亡的過程,也是一個動態(tài)的概念。注意:世界萬物都可以同時完成多個工作,例如用戶可以使用計算機(jī)同時聽歌、打文件等活動,這些活動可以同時進(jìn)行,這種思想在Java中稱為并發(fā),而將并發(fā)完成的每一件事情稱為線程。Java多線程機(jī)制Java程序設(shè)計
3.多線程和多任務(wù):多線程和多任務(wù)是兩個既有聯(lián)系又有區(qū)別的概念,多任務(wù)是針對操作系統(tǒng)而言的,代表著操作系統(tǒng)可以同時執(zhí)行的程序個數(shù);多線程是針對一個程序而言的,代表著一個程序內(nèi)部可以同時執(zhí)行的線程個數(shù),而每個線程可以完成不同的任務(wù)。例如Java推出的HotJava瀏覽器,你可以一邊瀏覽網(wǎng)頁一邊下載新網(wǎng)頁,可以同時顯示動畫和播放音樂。
4.主線程:當(dāng)JVM加載代碼,發(fā)現(xiàn)main方法之后,就會啟動一個線程,這個線程稱作“主線程”,該線程負(fù)責(zé)執(zhí)行main方法。如果main方法中沒有創(chuàng)建其他的線程,那么當(dāng)main方法執(zhí)行完最后一個語句,JVM就會結(jié)束我們的Java應(yīng)用程序。如果main方法中又創(chuàng)建了其他線程,那么JVM就要在主線程和其他線程之間輪流切換,保證每個線程都有機(jī)會使用CPU資源,main方法即使執(zhí)行完最后的語句,JVM也不會結(jié)束我們的程序,JVM一直要等到程序中的所有線程都結(jié)束之后,才結(jié)束我們的Java應(yīng)用程序。Java多線程機(jī)制Java程序設(shè)計
5.線程的狀態(tài)與生命周期
1)新建當(dāng)一個Thread類或其子類的對象被聲明并創(chuàng)建時,新生的線程對象處于新建狀態(tài)。此時它已經(jīng)有了相應(yīng)的內(nèi)存空間和其他資源。
2)運行線程創(chuàng)建之后就具備了運行的條件,一旦輪到它來享用CPU資源時,即JVM將CPU使用權(quán)切換給該線程時,此線程的就可以脫離創(chuàng)建它的主線程獨立開始自己的生命周期了(即run方法執(zhí)行的過程)。
3)中斷有4種原因的中斷:CPU資源從當(dāng)前線程切換給其他線程執(zhí)行了sleep(intmillsecond)方法執(zhí)行了wait()方法進(jìn)入阻塞狀態(tài)
4)死亡run方法結(jié)束。Java多線程機(jī)制Java程序設(shè)計6.線程的創(chuàng)建:創(chuàng)建線程的方式有兩種:通過創(chuàng)建Thread類的子類來實現(xiàn);通過實現(xiàn)Runnable接口的類來實現(xiàn)。1)Thread的子類創(chuàng)建線程設(shè)計Thread的子類,重寫父類的run方法用Thread類或子類創(chuàng)建線程對象使用start方法啟動線程當(dāng)JVM將CPU使用權(quán)切換給線程時,自動執(zhí)行run方法。注意:完成線程功能的代碼放在類的run()方法中,當(dāng)一個類繼承Thread類后,就可以在該類中覆蓋run()方法,將實現(xiàn)該線程功能的代碼寫入run()方法中,然后同時調(diào)用Thread類中的start()方法執(zhí)行線程,也就是調(diào)用run()方法。getName()獲取線程的名稱,默認(rèn)線程的名稱為Thread-編號。Java多線程機(jī)制Java程序設(shè)計2)使用Runnable接口實現(xiàn)多線程用繼承Thread類的子類或?qū)崿F(xiàn)Runable接口的類來創(chuàng)建線程無本質(zhì)區(qū)別,但由于Java不支持多重繼承,所以如果一個類必須繼承另一個非Thread類,此時要實現(xiàn)多線程只能通過實現(xiàn)Runnable接口的方式。通過Runnable接口實現(xiàn)多線程的方法:設(shè)計一個實現(xiàn)Runnable接口的類,重寫run方法;以該類的對象為參數(shù)建立Thread類的對象;調(diào)用Thread類對象的start方法啟動線程,將執(zhí)行權(quán)轉(zhuǎn)交到run方法。線程的優(yōu)先級線程在創(chuàng)建時,繼承了父類的優(yōu)先級。線程創(chuàng)建后,可以在任何時刻調(diào)用setPriority方法改變線程的優(yōu)先級。優(yōu)先級為1~10,Thread定義了其中3個常數(shù):MAX_PRIORITY最大優(yōu)先級(值為10);MIN_PRIORITY最小優(yōu)先級(值為1);NORM_PRIORITY默認(rèn)優(yōu)先級(值為5)Java多線程機(jī)制Java程序設(shè)計
7.線程的常用方法:start():線程調(diào)用該方法將啟動線程,使之從新建狀態(tài)進(jìn)入就緒隊列排隊,一旦輪到它來享用CPU資源時,就可以脫離創(chuàng)建它的線程獨立開始自己的生命周期了。run():線程對象被調(diào)度之后所執(zhí)行的操作,由系統(tǒng)自動調(diào)用,用戶程序不得引用。系統(tǒng)的Thread類中,run()方法沒有具體內(nèi)容,所以用戶程序需要創(chuàng)建自己的Thread類的子類,并重寫run()方法來覆蓋原來的run()方法。當(dāng)run方法執(zhí)行完畢,線程就變成死亡狀態(tài)。sleep(intmillsecond):線程占有CPU期間,執(zhí)行sleep方法來使自己放棄CPU資源,休眠一段時間。如果線程在休眠時被打斷,JVM就拋出InterruptedException異常。因此,必須在try~catch語句塊中調(diào)用sleep方法。isAlive():線程處于運行狀態(tài)時,isAlive()方法返回true,否則返回false。注意:一個已經(jīng)運行的線程在沒有進(jìn)入死亡狀態(tài)時,不要再給線程分配實體。currentThread():是Thread類中的類方法,可以用類名調(diào)用,該方法返回當(dāng)前正在使用CPU資源的線程。interrupt():用來“吵醒”休眠的線程。Java多線程機(jī)制Java程序設(shè)計8.線程同步:Java提供了多線程機(jī)制,通過多線程的并發(fā)運行可以提高系統(tǒng)資源利用率,改善系統(tǒng)性能。但在有些情況下,一個線程必須和其他線程合作才能共同完成任務(wù)。線程可以共享內(nèi)存,利用這個特點可以在線程之間傳遞信息。注意:同步的前提必須有兩個或者兩個以上的線程、必須是多個線程使用同一個鎖、必須保證同步中只能有一個線程在運行。在Java中,實現(xiàn)同步操作的方法是在共享內(nèi)存變量的方法前加synchronized修飾符。在程序運行過程中,如果某一線程調(diào)用經(jīng)synchronized修飾的方法,在該線程結(jié)束此方法的運行之前,其他所有線程都不能運行該方法,只有等該線程完成此方法的運行后,其他線程才能y運行該方法。注意:synchronized關(guān)鍵字可以修飾方法,可以修飾代碼塊,但是不能修飾構(gòu)造器和屬性。存放線程執(zhí)行體的run()方法不能用synchronized關(guān)鍵字修飾,否則這樣線程依然不安全,只能修飾另外一個方法,然后在run()方法中調(diào)用該方法。當(dāng)同步代碼塊和同步方法同時維護(hù)多線程安全時,要保證他們持有的同步監(jiān)視器必須相同,即this,否則線程不安全。二、I/O文件流Java程序設(shè)計I/O流提供一條通道程序,可以使用這條通道把源中的字節(jié)序列送給目的地。把輸入流的指向稱做源,程序從指向源的輸入流中讀取源中的數(shù)據(jù)。而輸出流的指向是字節(jié)要去的一個目的地(或用戶),程序通過向輸出流中寫入數(shù)據(jù)把信息傳遞到目的地。雖然I/O流經(jīng)常與磁盤文件存取有關(guān),但是程序的源和目的地也可以是鍵盤、鼠標(biāo)、內(nèi)存或顯示器窗口。Java的I/O流庫提供大量的流類(在包java.io中)。但是,所有輸入流類都是抽象類InputStream(字節(jié)輸入流)或抽象類Reader(字符輸入流)的子類,而所有輸出流都是抽象類OutputStream(字節(jié)輸出流)或抽象類Writer(字符輸出流)的子類。I/O文件流Java程序設(shè)計I/O文件流Java程序設(shè)計1、File類File類的對象主要用來獲取文件本身的一些信息,例如文件所在的目錄、文件的長度、文件讀寫權(quán)限等,不涉及對文件的讀寫操作構(gòu)造方法有3個:
File(Stringfilename);File(StringdirectoryPath,Stringfilename);File(Filef,Stringfilename);注意:delete()方法刪除由File對象的路徑所表示的磁盤文件。它只能刪除普通文件,而不能刪除目錄,即使是空目錄也不行。File類不能訪問文件的內(nèi)容,即不能夠從文件中讀取數(shù)據(jù)或往文件里寫數(shù)據(jù),它只能對文件本身的屬性進(jìn)行操作。2、FileInputStream類
使用文件輸入流構(gòu)造方法建立通往文件的輸入流時,可能會出現(xiàn)錯誤(也被稱為異常)。為了把一個文件輸入流對象與一個文件關(guān)聯(lián)起來,使用類似于下面所示的代碼:try{FileInputStreamins=newFileInputStream("myfile.dat");}catch(IOExceptione){System.out.println("Filereaderror:"+e);//文件I/O錯誤}I/O文件流Java程序設(shè)計從輸入流中讀取字節(jié)read方法給程序提供一個從輸入流中讀取數(shù)據(jù)的基本方法,read方法從輸入流中順序讀取源中的單個字節(jié)數(shù)據(jù),該方法返回字節(jié)值(0~255之間的一個整數(shù)),如果到達(dá)源的末尾,該方法返回-1。read方法還有其它一些形式。這些形式能使程序把多個字節(jié)讀到一個字節(jié)數(shù)組中:
intread(byteb[]);intread(byteb[],intoff,intlen);注意:InputStream是一個抽象類,程序中實際使用的是它的各種子類對象。不是所有的子類都會支持InputStream中定義的某些方法的,如skip,mark,reset等,這些方法只對某些子類有用。I/O文件流Java程序設(shè)計3、FileOutputStream類
FileOutputStream提供了基本的文件寫入能力。構(gòu)造方法:
FileOutputStream(Stringname)
FileOutputStream(Filefile)FileOutputStream流使用write方法把字節(jié)寫入到輸出流達(dá)到目的地,write的格式如下:
publicvoidwrite(byteb[])其功能是寫b.length個字節(jié)到輸出流。
publicvoid.write(byteb[],intoff,intlen)其功能是從給定字節(jié)數(shù)組中起始于偏移量off處寫len個字節(jié)到輸出流。I/O文件流Java程序設(shè)計4、FileReader類和FileWriter類
與FileInputStream、FileOutputStream字節(jié)流相對應(yīng)的是FileReader、FileWriter字符流,他們分別是Reader和Writer的子類,其構(gòu)造方法分別是:
FileReader(Stringfilename),FileWriter(Stringfilename)。注意:編譯運行后的結(jié)果與使用FileInput的效果一致。由于FileWriter可以往文件中寫入字符串,我們不用將字符串轉(zhuǎn)換為字節(jié)數(shù)組。5、使用文件對話框打開和保存文件
由于漢字在文件中占用2個字節(jié),如果使用字節(jié)流,讀取不當(dāng)會出現(xiàn)亂碼現(xiàn)象,采用字符流就可以避免這個現(xiàn)象,因為,在Unicode字符中,一個漢字被看作一個字符。使用文件對話框方便地打開和保存文件,因為文件對話框可以使用戶很方便的選擇文件所在的目錄以及文件的名字。I/O文件流Java程序設(shè)計6、數(shù)據(jù)流
DataInputStrea
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國正畸蠟行業(yè)市場現(xiàn)狀分析及競爭格局與投資發(fā)展研究報告
- 2025-2030年中國極光激酶C行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030年中國更年期潮熱藥物行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 經(jīng)濟(jì)法概論不同類型試題及答案
- 2025-2030年中國智慧高速公路行業(yè)市場深度分析及前景趨勢與投資研究報告
- 2025-2030年中國無菌包裝行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030年中國施工用鋼卷尺行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030年中國救援板行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 行政管理經(jīng)濟(jì)法提升方法試題及答案
- 2025-2030年中國擠壓機(jī)械行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 紙塑工藝知識介紹
- 高二學(xué)考動員主題班會課件
- 水溝抹灰施工方案
- 人教版八年級物理下冊 實驗題03 浮力的實驗(含答案詳解)
- spc(xbar-r-xbar-s-中位數(shù)極差3合一控制圖)
- SCARA工業(yè)機(jī)器人手臂設(shè)計
- 公路工程竣工環(huán)境保護(hù)驗收調(diào)查報告
- 第二章殘疾康復(fù)
- 三年級下冊美術(shù)說課稿-第十二課 賽龍舟 ︳湘美版
- 國家開放大學(xué)電大《建筑制圖基礎(chǔ)》機(jī)考網(wǎng)考題庫及答案
- 上海市材料工程學(xué)校教師招聘考試真題2022
評論
0/150
提交評論