Java程序設(shè)計(jì)第七章_第1頁(yè)
Java程序設(shè)計(jì)第七章_第2頁(yè)
Java程序設(shè)計(jì)第七章_第3頁(yè)
Java程序設(shè)計(jì)第七章_第4頁(yè)
Java程序設(shè)計(jì)第七章_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

目錄第一章Java與程序邏輯第二章面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)第三章面向?qū)ο蠡咎匦缘谒恼鲁S脤?duì)象使用第五章異常處理第六章I/O操作第七章多線(xiàn)程編程第八章Java的GUI可視界面編程第七章多線(xiàn)程編程21任務(wù)7.1創(chuàng)建多線(xiàn)程程序任務(wù)7.2多線(xiàn)程程序的同步任務(wù)7.1創(chuàng)建多線(xiàn)程程序4情境描述123問(wèn)題分析解決方案知識(shí)總結(jié)5應(yīng)用實(shí)踐7.1.1情境描述為了提高大家的工作積極性,人事部門(mén)覺(jué)得在工資管理系統(tǒng)中增加情趣模塊,為大家業(yè)余時(shí)間提供娛樂(lè),在規(guī)定的時(shí)間內(nèi)猜數(shù)字,通過(guò)猜中數(shù)字個(gè)數(shù)的高低來(lái)進(jìn)行排名,此游戲?yàn)榇蠹姨峁┝朔潘傻目臻g。為了完成猜數(shù)字游戲的核心功能,需要完成以下任務(wù):1)多線(xiàn)程編程2)Java網(wǎng)絡(luò)編程技術(shù)7.1.2問(wèn)題分析猜數(shù)字游戲主要是通過(guò)服務(wù)器隨機(jī)產(chǎn)生一個(gè)數(shù),客戶(hù)端用戶(hù)通過(guò)猜一個(gè)數(shù)字,通過(guò)提示用戶(hù)猜的數(shù)的大小給出猜得過(guò)大或者過(guò)小提醒用戶(hù),用戶(hù)根據(jù)提醒再次猜新的數(shù),最終達(dá)到猜中的目的。在給定的時(shí)間內(nèi),猜的數(shù)字個(gè)數(shù)越多,積分越高,本程序主要負(fù)責(zé)完成猜字核心功能,猜字的積分記錄及時(shí)間控制問(wèn)題,在此不涉及。7.1.3解決方案

1、打開(kāi)Eclipse開(kāi)發(fā)環(huán)境。2、創(chuàng)建包c(diǎn)om.esms.thread包。3、在com.esms.thread包下創(chuàng)建類(lèi)ServerApp,負(fù)責(zé)服務(wù)端程序。4、編寫(xiě)客戶(hù)端用戶(hù)猜字程序ClientApp.java。5、運(yùn)行服務(wù)器端。6、運(yùn)行客戶(hù)端,進(jìn)行猜字操作。7.1.4知識(shí)總結(jié)1.多線(xiàn)程概念線(xiàn)程是比進(jìn)程更小的執(zhí)行單位。一個(gè)進(jìn)程在其執(zhí)行過(guò)程中可以產(chǎn)生多個(gè)線(xiàn)程,形成多條執(zhí)行線(xiàn)索。從運(yùn)行角度看,每個(gè)線(xiàn)程也有其產(chǎn)生、存在和消亡的過(guò)程,也是一個(gè)動(dòng)態(tài)的概念。多任務(wù)和多線(xiàn)程是兩個(gè)不同的概念,多任務(wù)是指多進(jìn)程,是指一個(gè)操作系統(tǒng)可以同時(shí)運(yùn)行多個(gè)程序,即啟動(dòng)多個(gè)進(jìn)程;而多線(xiàn)程是指一個(gè)程序中可以同時(shí)運(yùn)行多個(gè)不同的線(xiàn)程來(lái)執(zhí)行不同的任務(wù),每個(gè)線(xiàn)程都是該程序內(nèi)部的一個(gè)可執(zhí)行代碼序列。7.1.4知識(shí)總結(jié)2.Java多線(xiàn)程技術(shù)Java語(yǔ)言中定義的線(xiàn)程同樣包括一個(gè)內(nèi)存入口點(diǎn)地址、一個(gè)出口點(diǎn)地址以及能夠順序執(zhí)行的代碼序列,可以說(shuō)線(xiàn)程就是程序內(nèi)部的具有并發(fā)性的順序代碼流。Java語(yǔ)言中,線(xiàn)程通過(guò)java.lang.Thread類(lèi)來(lái)實(shí)現(xiàn),在該類(lèi)中封裝了虛擬的CPU來(lái)進(jìn)行線(xiàn)程操作控制。一個(gè)Java程序啟動(dòng)后,就已經(jīng)有一個(gè)線(xiàn)程在運(yùn)行,可以通過(guò)調(diào)用Thread.currentThread()來(lái)查看當(dāng)前運(yùn)行的是哪個(gè)線(xiàn)程。7.1.4知識(shí)總結(jié)3.線(xiàn)程的創(chuàng)建線(xiàn)程的所有活動(dòng)都是通過(guò)線(xiàn)程體run()方法來(lái)實(shí)現(xiàn)的。(1)通過(guò)繼承Thread類(lèi)創(chuàng)建線(xiàn)程多線(xiàn)程的實(shí)現(xiàn)步驟如下:將需要實(shí)現(xiàn)多線(xiàn)程的類(lèi)聲明為繼承Thread類(lèi),覆蓋其run()方法,并將線(xiàn)程體放在該方法里。創(chuàng)建一個(gè)該類(lèi)的實(shí)例。啟動(dòng)該實(shí)例。通過(guò)start()方法啟動(dòng)線(xiàn)程的執(zhí)行,start()方法是在Thread類(lèi)中聲明的。7.1.4知識(shí)總結(jié)3.線(xiàn)程的創(chuàng)建線(xiàn)程的所有活動(dòng)都是通過(guò)線(xiàn)程體run()方法來(lái)實(shí)現(xiàn)的。(2)通過(guò)Runnable接口創(chuàng)建線(xiàn)程通過(guò)Runnable接口創(chuàng)建線(xiàn)程的基本步驟如下:①將需要實(shí)現(xiàn)多線(xiàn)程的類(lèi)聲明為實(shí)現(xiàn)Runnable接口的類(lèi),實(shí)現(xiàn)run()方法,并將線(xiàn)程體放在該方法里。②創(chuàng)建一個(gè)該類(lèi)的實(shí)例。③從該實(shí)例中創(chuàng)建一個(gè)Thread實(shí)例。④啟動(dòng)該Thread的實(shí)例。7.1.5應(yīng)用實(shí)踐模擬銀行中的會(huì)計(jì)和出納。兩個(gè)線(xiàn)程:accounting和cashier,使用同一個(gè)目標(biāo)對(duì)象,共享目標(biāo)對(duì)象的money。當(dāng)money值小于150時(shí),線(xiàn)程accounting結(jié)束自己的run()方法進(jìn)入死亡狀態(tài);當(dāng)money值小于0時(shí),線(xiàn)程cashier結(jié)束自己的run()方法進(jìn)入死亡狀態(tài)。任務(wù)7.2多線(xiàn)程程序的同步4情境描述123問(wèn)題分析解決方案知識(shí)總結(jié)5應(yīng)用實(shí)踐7.2.1情境描述多個(gè)線(xiàn)程的運(yùn)行往往存在競(jìng)爭(zhēng)資源的問(wèn)題,競(jìng)爭(zhēng)過(guò)程中時(shí)常存在沖突,為了解決沖突,采取多線(xiàn)程的同步機(jī)制能解決問(wèn)題。為了完成線(xiàn)程同步,需要完成以下任務(wù):1)方法同步機(jī)制2)多線(xiàn)程編程技術(shù)7.2.2問(wèn)題分析生產(chǎn)者與消費(fèi)者問(wèn)題在于他們共享同一資源,當(dāng)生產(chǎn)者生產(chǎn)過(guò)程中,消費(fèi)者無(wú)法獲取資源,因此,生產(chǎn)者鎖定了資源的訪(fǎng)問(wèn)。消費(fèi)者消費(fèi)資源時(shí),生產(chǎn)者停止生產(chǎn)。Java語(yǔ)言采取synchronized關(guān)鍵字實(shí)現(xiàn)同步控制。7.2.3解決方案

1、打開(kāi)Eclipse。2、在com.esms.thread包下建立BufferLock類(lèi),用于共享資源的同步互斥操作。3、在com.esms.thread下建立生產(chǎn)者Producer類(lèi),實(shí)現(xiàn)生產(chǎn)者生產(chǎn)資源。4、在com.esms.thread下建立消費(fèi)者Customer類(lèi),實(shí)現(xiàn)消費(fèi)者消費(fèi)資源。5、運(yùn)行程序,測(cè)試生產(chǎn)者與消費(fèi)者同步。7.2.4知識(shí)總結(jié)1.線(xiàn)程的生命周期一個(gè)線(xiàn)程從它創(chuàng)建到消亡的生命周期大致可分為5個(gè)狀態(tài):新建狀態(tài)、可運(yùn)行狀態(tài)、運(yùn)行狀態(tài)、阻塞狀態(tài)、消亡狀態(tài)。它們之間的狀態(tài)關(guān)系如圖所示。可運(yùn)行狀態(tài)(Runnable)新建狀態(tài)(New)阻塞狀態(tài)(Blocked)運(yùn)行狀態(tài)(Running)消亡狀態(tài)(Dead)start()系統(tǒng)調(diào)度阻塞事件解除阻塞run()結(jié)束7.2.4知識(shí)總結(jié)2.線(xiàn)程的優(yōu)先級(jí)存在多個(gè)線(xiàn)程時(shí),可以通過(guò)設(shè)置線(xiàn)程的優(yōu)先級(jí)來(lái)決定哪個(gè)線(xiàn)程能夠得到更多的執(zhí)行機(jī)會(huì)。每個(gè)Java線(xiàn)程的優(yōu)先級(jí)是1~10之間的正整數(shù)。1代表最小的優(yōu)先級(jí),10代表最大優(yōu)先級(jí)。線(xiàn)程的默認(rèn)優(yōu)先級(jí)是5。7.2.4知識(shí)總結(jié)3.線(xiàn)程的同步控制(1)同步控制與互斥鎖Java語(yǔ)言中,為了保證線(xiàn)程對(duì)共享資源操作的完整性,用關(guān)鍵字synchronized為共享資源加鎖來(lái)解決。(2)生產(chǎn)者與消費(fèi)者兩個(gè)線(xiàn)程需要在以下兩個(gè)方面進(jìn)行同步:兩個(gè)線(xiàn)程不能同時(shí)訪(fǎng)問(wèn)存儲(chǔ)數(shù)據(jù)的對(duì)象。兩個(gè)線(xiàn)程必須相互協(xié)作,生產(chǎn)者生產(chǎn)數(shù)據(jù)以后,要告訴消費(fèi)者數(shù)據(jù)已準(zhǔn)備好,可以取數(shù)據(jù),生產(chǎn)者等待消費(fèi)者取走數(shù)據(jù)。消費(fèi)者取走數(shù)據(jù)后,要告訴生產(chǎn)者已取走數(shù)據(jù),可以生產(chǎn)新數(shù)據(jù)。這需要調(diào)用wait()、notify()和notifyAll()方法來(lái)實(shí)現(xiàn)。7.2.4知識(shí)總結(jié)3.線(xiàn)程的同步控制加入wait和notify后的線(xiàn)程的生命周期狀態(tài)圖如圖所示。新建狀態(tài)(New)可運(yùn)行狀態(tài)(Runnable)阻塞狀態(tài)(Blocked)運(yùn)行狀態(tài)(Running)消亡狀態(tài)(Dead)解除阻塞等待對(duì)象鎖的隊(duì)列等待滿(mǎn)足條件的線(xiàn)程隊(duì)列阻塞事件系統(tǒng)調(diào)度run()結(jié)束獲得鎖wait()釋放掉所持有的鎖synchronizednotify()/notifyAll()start()7.2.4知識(shí)總結(jié)3.線(xiàn)程的同步控制(3)死鎖問(wèn)題Java語(yǔ)言本身既不能發(fā)現(xiàn)死鎖,也不能預(yù)防死鎖,只能靠程序員謹(jǐn)慎的設(shè)計(jì)來(lái)避免。一般來(lái)說(shuō),如果線(xiàn)程因?yàn)榈却硞€(gè)先決條件而受阻,它應(yīng)該釋放所占的自由,讓其他線(xiàn)程使用。當(dāng)先決條件滿(mǎn)足而恢復(fù)運(yùn)行時(shí),再重新獲得這些資源。7.2.5應(yīng)用實(shí)踐編寫(xiě)一個(gè)Java應(yīng)用程序,模擬銀行系統(tǒng)對(duì)用戶(hù)存款和取款的處理過(guò)程。假設(shè)存款人和取款人在同

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論