版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第8章線程程序是一段靜態(tài)的代碼,是應(yīng)用軟件執(zhí)行的藍(lán)本進(jìn)程是程序的一次動(dòng)態(tài)執(zhí)行過程,對(duì)應(yīng)了從代碼加載、執(zhí)行到執(zhí)行完畢的一個(gè)完整過程。作為藍(lán)本的同一段程序,可以被多次加載到系統(tǒng)的不同內(nèi)存區(qū)域分別執(zhí)行,形成不同進(jìn)程線程是比進(jìn)程更小的執(zhí)行單位,一個(gè)進(jìn)程在執(zhí)行過程中,可以產(chǎn)生多個(gè)線程,形成多條執(zhí)行線索。每條線索,即每個(gè)線程也有它自身的產(chǎn)生、存在和消亡的過程,也是一個(gè)動(dòng)態(tài)的概念每個(gè)進(jìn)程都有一段專用的內(nèi)存區(qū)域,線程間可以共享內(nèi)存,實(shí)現(xiàn)數(shù)據(jù)交換、實(shí)時(shí)通信和必要的同步操作一個(gè)進(jìn)程中同時(shí)運(yùn)行的多個(gè)線程可以類比為一個(gè)計(jì)算機(jī)上同時(shí)運(yùn)行的多個(gè)進(jìn)程:對(duì)于前者,各線程共享地址空間、打開的文件以及其他資源,只有堆棧和寄存器數(shù)據(jù)是獨(dú)立的;對(duì)于后者,各進(jìn)程共享物理內(nèi)存、磁盤、打印機(jī)以及其他資源,但存儲(chǔ)空間相互獨(dú)立進(jìn)程有單線程進(jìn)程和多線程進(jìn)程之分線程有時(shí)也稱為輕量級(jí)(linghtweight)進(jìn)程多線程是把多任務(wù)的原理應(yīng)用到程序更底一層中進(jìn)一步發(fā)展了這一原理進(jìn)程有一組完整的屬于自己的變量,而同一進(jìn)程中不同線程共享這些數(shù)據(jù)創(chuàng)建和注銷單個(gè)線程比進(jìn)程所需的開銷少得多與線程間的通信相比,進(jìn)程間通信慢得多,要求也較高當(dāng)調(diào)用java解釋器啟動(dòng)一個(gè)應(yīng)用時(shí),首先是創(chuàng)建了一個(gè)進(jìn)程,該進(jìn)程中首先創(chuàng)建主線程;如果在另外一個(gè)命令窗口中調(diào)用java解釋器啟動(dòng)另一個(gè)應(yīng)用時(shí),又創(chuàng)建了一個(gè)進(jìn)程,該進(jìn)程中仍然首先創(chuàng)建主線程……有效利用線程可以提高軟件的執(zhí)行效率Java語言對(duì)線程提供了方便的支持每天工商銀行開始營業(yè)可以認(rèn)為一個(gè)進(jìn)程啟動(dòng)了,停止?fàn)I業(yè)時(shí)該進(jìn)程結(jié)束了;交通銀行、農(nóng)業(yè)銀行也類似,都是不同的進(jìn)程,各銀行間有獨(dú)立的數(shù)據(jù)庫,跨行間業(yè)務(wù)雖可以進(jìn)行,但相對(duì)困難工商銀行所屬的各分理處上的出納柜臺(tái)可以認(rèn)為是該進(jìn)程中的線程,各出納柜臺(tái)共享數(shù)據(jù)庫,在不同分理處(或不同柜臺(tái))可以方便開展業(yè)務(wù)線程的管理和調(diào)度是難點(diǎn)和關(guān)鍵8.1線程的創(chuàng)建每個(gè)java程序都有一個(gè)缺省的主線程,對(duì)于Application,主線程是main()方法執(zhí)行的線索;對(duì)于Applet,主線程指揮瀏覽器加載并執(zhí)行小程序Java使用Thread類及其子類的對(duì)象來表示線程,要實(shí)現(xiàn)多線程,必須在主線程中創(chuàng)建新的線程對(duì)象線程生命周期中的五種狀態(tài):新建:創(chuàng)建時(shí)的狀態(tài),此時(shí)線程對(duì)象已經(jīng)有了相應(yīng)的內(nèi)存空間和其它資源,并已被初始化線程生命周期中的五種狀態(tài):續(xù)就緒:調(diào)用start()方法后,進(jìn)入線程對(duì)列排隊(duì)等待CPU時(shí)間片,一旦輪到它來享用CPU資源時(shí),就脫離創(chuàng)建它的主線程獨(dú)立開始自己的生命周期;另外由原來處于阻塞狀態(tài)的線程被解除阻塞后也進(jìn)入就緒狀態(tài)運(yùn)行:就緒狀態(tài)的線程被調(diào)度并獲得處理器資源時(shí),進(jìn)入運(yùn)行狀態(tài)。每個(gè)線程對(duì)象都有一個(gè)run()方法,當(dāng)線程對(duì)象被調(diào)度執(zhí)行時(shí),將自動(dòng)調(diào)用本對(duì)象的run()方法線程生命周期中的五種狀態(tài):續(xù)阻塞:一個(gè)正在執(zhí)行的線程在某些特殊情況下,例如被認(rèn)為掛起或需要執(zhí)行費(fèi)時(shí)的輸入輸出操作時(shí),將讓出CPU并暫時(shí)終止自己的執(zhí)行,進(jìn)入阻塞狀態(tài)。阻塞時(shí)它不能進(jìn)入排隊(duì)隊(duì)列,只有當(dāng)引起阻塞的原因被消除時(shí),線程才能轉(zhuǎn)入就緒狀態(tài),重新線程隊(duì)列中排隊(duì)等待CPU資源,以便從原來終止處開始繼續(xù)執(zhí)行死亡:處于死亡狀態(tài)的線程不具有繼續(xù)運(yùn)行的能力。死亡原因有兩個(gè),即run()方法正常結(jié)束或提前強(qiáng)制性地終止,如執(zhí)行stop()或destroy()方法線程調(diào)度依據(jù)優(yōu)先級(jí)基礎(chǔ)上的“先到先服務(wù)”原則新建就緒阻塞運(yùn)行死亡線程的行為和功能體現(xiàn)在run()方法中,而Thread類中定義的run()方法什么也不做,因此直接用Thread類創(chuàng)建線程意義不大。創(chuàng)建有意義的線程對(duì)象關(guān)鍵是使其具有合適的、能被系統(tǒng)識(shí)別的run()方法(publicvoid)。一種方法是由Thread類派生子類,在該子類中改寫run()方法,由該子類便可創(chuàng)建有意義的線程對(duì)象。java.lang包中除了有Thread類以外,還有一個(gè)接口Runnable,該接口中聲明了一個(gè)run()方法,創(chuàng)建有意義的線程對(duì)象的另一種方法是,首先在一個(gè)實(shí)現(xiàn)了Runnable接口的類中定義新的run()方法,并利用該實(shí)現(xiàn)類創(chuàng)建一個(gè)對(duì)象,然后在創(chuàng)建線程對(duì)象時(shí),把該實(shí)現(xiàn)類對(duì)象作為調(diào)用Thread類構(gòu)造器的參數(shù),系統(tǒng)會(huì)用該實(shí)現(xiàn)類對(duì)象的run()方法覆蓋新創(chuàng)建線程對(duì)象的run()方法。線程的主要方法:啟動(dòng)線程的start()方法定義線程操作的run()方法使線程暫時(shí)休眠的sleep()方法判斷線程是否未消亡的isAlive()方法:在調(diào)用stop()方法終止一個(gè)線程之前,最好先用該方法檢查一下該線程是否存活,殺死不存在線程可能會(huì)造成系統(tǒng)錯(cuò)誤。P220例,p222例8.2同步當(dāng)兩個(gè)線程需要同時(shí)操作同一對(duì)象時(shí),可能會(huì)由于夾插操作而破壞數(shù)據(jù)。在多線程機(jī)制中,是通過給對(duì)象加鎖來解決的。當(dāng)某個(gè)對(duì)象被一個(gè)線程上鎖后,僅有該線程能夠訪問該對(duì)象。8.2.1同步方法要使某個(gè)類能在多線程環(huán)境中使用,應(yīng)該將類中某些適當(dāng)方法說明為synchronized若線程對(duì)某對(duì)象調(diào)用synchronized方法,那么該對(duì)象就被加鎖。此時(shí)若另一個(gè)線程再對(duì)該對(duì)象調(diào)用synchronized方法,后一個(gè)該線程將被阻塞直到加在該對(duì)象上的鎖被釋放(synchronized方法返回后)。當(dāng)對(duì)一個(gè)已經(jīng)由同一個(gè)線程加鎖的對(duì)象調(diào)用synchronized方法時(shí),執(zhí)行該方法,但該對(duì)象上的鎖要到最外層synchronized方法返回時(shí)才會(huì)被釋放。構(gòu)造器無需同步,它僅在創(chuàng)建對(duì)象時(shí)才被執(zhí)行,而任何新創(chuàng)建對(duì)象只能在一個(gè)線程中創(chuàng)建。P225例類方法也可以通過使用該類的類范圍內(nèi)的鎖來同步,兩個(gè)線程不能同時(shí)對(duì)同一個(gè)類執(zhí)行synchronized靜態(tài)方法。當(dāng)一個(gè)線程以同步靜態(tài)方法對(duì)一個(gè)類加鎖時(shí),仍然可以調(diào)用該類對(duì)象的synchronized非靜態(tài)方法,只有那些synchronized靜態(tài)方法被阻塞。當(dāng)擴(kuò)展類改寫父類的synchronized方法時(shí),新方法可以是synchronized
,也可以不是。而調(diào)用父類的方法,它仍然是synchronized的,因此,擴(kuò)展類的非synchronized方法并不會(huì)改變父類實(shí)際的synchronized行為。如果非synchronized
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子政務(wù)信息共享平臺(tái)建設(shè)合同
- 企業(yè)稅收籌劃顧問服務(wù)協(xié)議
- 2025版報(bào)關(guān)銷售合同范本適用于外貿(mào)企業(yè)進(jìn)口2篇
- 2025版跨境電商平臺(tái)投資擔(dān)保借款合同范本3篇
- 烏魯木齊2025年度房屋租賃合同房屋租金市場調(diào)研3篇
- 2025年度市場營銷策劃外包服務(wù)合同
- 2025版假山施工全過程質(zhì)量監(jiān)督與驗(yàn)收合同范本3篇
- 2025版智能能源管理系統(tǒng)技術(shù)承包合同2篇
- 2025版教育機(jī)構(gòu)貸款合同模板(含學(xué)費(fèi)收取安排)3篇
- 2025版物業(yè)管理合同包含物業(yè)服務(wù)范圍、標(biāo)準(zhǔn)和費(fèi)用支付2篇
- 創(chuàng)新者的窘境讀書課件
- 看不見的殺手-病毒性傳染病智慧樹知到期末考試答案2024年
- 2024年福建省閩投人才服務(wù)有限公司招聘筆試參考題庫附帶答案詳解
- 《福建省整體裝配式衛(wèi)浴間標(biāo)準(zhǔn)設(shè)計(jì)圖集》
- 疾控中心慢病科工作總結(jié)
- 錨索張拉伸長量計(jì)算
- 部編版語文九年級(jí)上冊(cè)單元復(fù)習(xí)課教案
- 孕酮檢驗(yàn)報(bào)告
- 2024年度醫(yī)院皮膚科醫(yī)務(wù)人員績效述職統(tǒng)計(jì)報(bào)告課件
- 《成本費(fèi)用控制》課件
- 醫(yī)院消防培訓(xùn)方案
評(píng)論
0/150
提交評(píng)論