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

下載本文檔

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

文檔簡介

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

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

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

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論