版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第7章多線程7.1操作系統(tǒng)中的進(jìn)程與線程7.2Java的線程對象7.3線程的同步機制1多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第1頁!多線程程序示例(點名程序)設(shè)計思路:按照第6章的知識完成UI設(shè)計;完成在”開始點名”按鈕的事件處理方法通過jxl.jar包的方法打開studentName.xls文件通過隨機函數(shù),從excels文件讀取人名,顯示在TextField組件上2演示結(jié)果是:從console看到輸出了人名,可在TextField上沒有實時更新,只在最后才顯示出人的名字原因是什么?如何解決呢?多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第2頁!Jxl.jar包使用3baike.baidu./link?url=bTQZKzyYAaKGeLpmymbFe_8zTpM6o3hWSyOeBHr2HiYcvpScPx-TONG2xSx3NB7gpHtCh_2O1asTJWnQ5y_hha
jxl.jar是通過java操作excel表格的工具類庫讀取文件publicstaticvoidmain(Stringargs[]){ try { Workbookbook= Workbook.getWorkbook(newFile(“測試.xls”)); Sheetsheet=book.getSheet(0); Cellcell1=sheet.getCell(0,0); Stringresult=cell1.getContents(); } ……..}多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第3頁!1.進(jìn)程1)進(jìn)程的定義和屬性進(jìn)程(process)是一個可并發(fā)執(zhí)行的具有獨立功能的程序(program)關(guān)于某個數(shù)據(jù)集合的一次執(zhí)行過程,也是操作系統(tǒng)進(jìn)行資源分配和保護(hù)的基本單位。結(jié)構(gòu)性:進(jìn)程包括程序塊、數(shù)據(jù)塊和進(jìn)程控制塊三部分動態(tài)性:進(jìn)程只程序的一次執(zhí)行過程,是動態(tài)的概念獨立性:進(jìn)行是系統(tǒng)調(diào)度的獨立單位、是資源分配和保護(hù)的基本單位并發(fā)性:進(jìn)程可以并發(fā)執(zhí)行,提高資源利用率和系統(tǒng)效率交互性
:多個進(jìn)程可以共享變量,通過共享變量實現(xiàn)相互通信,多個進(jìn)程能夠協(xié)作完成一個任務(wù)。4多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第4頁!2.線程1)引入線程機制的動機和思路
動機:單線程進(jìn)程調(diào)度存在進(jìn)程時空開銷大、進(jìn)程通信代價大、不適合并行計算等問題。
思路:將進(jìn)程的兩項功能:“獨立分配資源”和“被調(diào)度分派執(zhí)行”分離,前一項仍由進(jìn)程完成,后一項交給線程完成。優(yōu)點:進(jìn)程作為資源分配和保護(hù)的獨立單元,不需要頻繁切換;線程作為系統(tǒng)調(diào)用和分派的基本單元,頻繁切換和調(diào)度。5多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第5頁!
3)線程的狀態(tài)
5)線程調(diào)度:任意時刻一個處理器上只能運行一個線程,其他線程排隊等待調(diào)度原則是同一優(yōu)先級采用先到先服務(wù)原則
線程剝奪原則有兩種:高優(yōu)先級、時間片結(jié)束6多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第6頁!7.2Java的線程對象7.2.1Runnable接口與Thread類7.2.2線程對象的優(yōu)先級7.2.3線程對象的生命周期7.2.4定時器與圖形動畫設(shè)計7多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第7頁!2.Thread線程類publicclassThreadextendsObjectimplementsRunnable{publicThread() //構(gòu)造方法
publicThread(Stringname) //name指定線程名
publicThread(Runnabletarget)//target指定線程的目標(biāo)對象
publicThread(Runnabletarget,Stringname)publicvoidrun() //描述線程操作的線程體publicfinalStringgetName()//返回線程名
publicfinalvoidsetName(Stringname)//設(shè)置線程名
publicstaticintactiveCount()//返回當(dāng)前活動線程個數(shù)
publicstaticThreadcurrentThread()//返回當(dāng)前執(zhí)行線程對象
publicStingtoString() //返回線程的字符串信息
publicvoidstart()//啟動已創(chuàng)建的線程對象}Java提供兩種實現(xiàn)多線程程序設(shè)計方法:繼承Thread類和實現(xiàn)Runnable接口;兩種方法的核心是實現(xiàn)run()方法——線程體8多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第8頁!【例7.2】聲明實現(xiàn)Runnable接口的奇數(shù)/偶數(shù)序列線程。Runnable接口實現(xiàn)多線程:
Thread構(gòu)造方法:publicThread(Runnabletarget);Thread的run方法:publicvoidrun()//描述線程操作的線程體{if(target!=null)
target.run();//執(zhí)行目標(biāo)對象的run()方法}Threadt1=newThread();//t1的run()方法為空Threadthread_odd=newThread(odd,"奇數(shù)線程");9多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第9頁!線程池1.在什么情況下使用線程池?
(1)單個任務(wù)處理的時間比較短
(2)將需處理的任務(wù)的數(shù)量大2.使用線程池的好處:(1)減少在創(chuàng)建和銷毀線程上所花的時間以及系統(tǒng)資源的開銷
(2)如不使用線程池,有可能造成系統(tǒng)創(chuàng)建大量線程而導(dǎo)致消耗完系統(tǒng)內(nèi)存以及”過度切換”3.線程池的幾個概念(1)線程池(Threadpool),池是一個容器,容器中有很多個執(zhí)行器,每一個執(zhí)行器是一個線程。(2)執(zhí)行器(Executor),每個執(zhí)行器是一個線程,每個執(zhí)行器可以執(zhí)行一個任務(wù)。(3)任務(wù)(Task),任務(wù)是每個線程具體要做的事,如資源下載,播放flash片段,打印一段文字到控制臺等等,它本身不能執(zhí)行,而需要將自身交給執(zhí)行器。10多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第10頁!7.2.2線程對象的優(yōu)先級Thread類中聲明了3個表示優(yōu)先級的公有靜態(tài)常量:publicstaticfinalintMIN__PRIORITY=1 //最低優(yōu)先級publicstaticfinalintMAX_PRIORITY=10 //最高優(yōu)先級publicstaticfinalintNORM_PRIORITY=5 //默認(rèn)優(yōu)先級Thread類中與線程優(yōu)先級有關(guān)的方法有以下2個:publicfinalintgetPriority() //獲得線程優(yōu)先級publicfinalvoidsetPriority(intnewPriority)//設(shè)置線程優(yōu)先級在windows中,直接設(shè)置優(yōu)先級效果不明顯,NumberThread.java中演示11多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第11頁!2.Thread類中改變和判斷線程狀態(tài)的方法線程啟動publicvoidstart()//啟動線程對象publicfinalbooleanisAlive()//是否啟動線程睡眠publicstaticvoidsleep(longmillis)throwsInterruptedException線程中斷publicvoidinterrupt()//設(shè)置中斷標(biāo)記publicbooleanisInterrupted()//判斷是否中斷publicstaticbooleaninterrupted()//判斷是否中斷12多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第12頁!7.2.4定時器與圖形動畫設(shè)計publicclassTimerimplementsSerializable{publicTimer(intdelay,ActionListenerl)
publicvoidaddActionListener(ActionListenerl)//注冊定時事件監(jiān)聽器
publicvoidsetDelay(intdelay)//設(shè)置延時的時間間隔
publicvoidstart()//啟動定時器
publicvoidstop()//停止定時器
publicvoidrestart()//重新啟動定時器}【例7.4】彈彈球,使用定時器實現(xiàn)圖形動畫。代碼簡要說明:BallsCanvas構(gòu)造方法中,創(chuàng)建并啟動了定時器,定時器時間處理方法中repaint;同時注冊了FocusListenerBallsJFrame構(gòu)造方法中,為Jspinner組件注冊了ChangeListener13多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第13頁!7.3線程的同步機制7.3.1交互線程7.3.2線程間的競爭關(guān)系與線程互斥7.3.3線程間的協(xié)作關(guān)系與線程同步如果并發(fā)執(zhí)行的多個線程問需要共享資源或交換數(shù)據(jù),則稱這一組線程為交互線程。交互線程并發(fā)執(zhí)行時相互之間會干擾或影響其他線程的執(zhí)行結(jié)果,因此交互線程間需要有同步機制。
14多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第14頁!7.3.1交互線程151.線程交互交互線程間存在兩種關(guān)系:競爭關(guān)系和協(xié)作關(guān)系。競爭關(guān)系的交互線程間需要采用線程互斥方式解決共享資源沖突問題。協(xié)作關(guān)系的交互線程間需要采用線程同步方式解決線程問通信及因執(zhí)行速度不同而引起的不同步問題。線程的同步機制包括線程互斥和線程同步,線程互斥是線程同步的特殊情況多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第15頁!7.3.2線程間的競爭關(guān)系與線程互斥線程間的競爭關(guān)系兩個線程共享同一資源,一個線程獲得該資源,另一個線程就必須等待。極端的狀態(tài):被阻塞線程永遠(yuǎn)得不到訪問權(quán)。出現(xiàn)兩個問題:死鎖、饑餓。16多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第16頁!3.Java的線程互斥實現(xiàn)(1)同步語句synchronized(對象)//對象即臨界資源
語句//語句塊為臨界區(qū)(2)同步方法synchronized方法聲明//同步方法體為臨界區(qū)基于操作系統(tǒng)對于線程進(jìn)入臨界區(qū)的3條原則,可以使用同步語句和同步方法來實現(xiàn)線程互斥。17多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第17頁!線程體中互斥鎖的用法publicvoidrun(){synchronized(this.account)//聲明臨界區(qū),鎖定指定賬戶對象
{doublehowmatch=this.account.balance();try{ Thread.sleep(1);}//花費時間catch(InterruptedExceptione){}this.account.put(this.value);System.out.println(this.account.getName()+"賬戶:現(xiàn)有"+howmatch+",存入"+this.value+",余額"+this.account.balance());}}保證了存錢或取錢操作過程中不會被其他線程中斷只有完成一次性完整存錢或取錢操作,才把資源釋放給其他線程。18多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第18頁!7.3.3線程間的協(xié)作關(guān)系與線程同步線程間的協(xié)作關(guān)系
多個線程共同完成一個任務(wù)而分工協(xié)作,但是每個線程都是獨立的速度在執(zhí)行,需要在某些特定的協(xié)調(diào)點上實現(xiàn)線程之間的同步?!纠?.7】發(fā)送線程與接收線程。例子分析:發(fā)送線程向buffer里面存數(shù)據(jù),接收線程從buffer里面去數(shù)據(jù)理想情況是:發(fā)送線程存一個,接收線程取一個實際情況:由于兩個線程是獨立運行,步調(diào)不一定一致。解決思路:發(fā)送線程存完數(shù)據(jù)后,通知接收線程來取;接收線程取完數(shù)據(jù)后通知發(fā)送線程可以繼續(xù)存數(shù)據(jù)。19多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第19頁!線程同步是解決線程協(xié)作關(guān)系的手段。線程互斥(存取款的例子)是線程同步的特殊例子。即逐次使用互斥共享資源。2.線程同步20多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第20頁!4.線程通信方法Java的線程通信方法publicfinalvoidwait()throwsInterruptedException//等待—阻塞本線程publicfinalnativevoidnotify(); //喚醒一個等待線程publicfinalnativevoidnotifyAll(); //喚醒所有等待線程線程通信方法結(jié)合信號量的PV操作就可以實現(xiàn)線程間的協(xié)作。21多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第21頁!【例7.9】發(fā)牌程序。圖7.121個發(fā)牌線程與4個取牌線程程序說明:約定一個緩沖區(qū)存放一張牌,緩沖區(qū)狀態(tài)設(shè)置為信號量發(fā)牌線程,一次產(chǎn)生1~52中的一個數(shù),每次發(fā)送一個數(shù)字到緩沖區(qū)4取牌線程編號為0~3,約定依次從緩沖區(qū)里取牌發(fā)牌線程優(yōu)先級高于取牌線程,任何一個取牌線程執(zhí)行后切換到發(fā)牌線程執(zhí)行22多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第22頁!修改程序,實現(xiàn)隨機發(fā)牌程序思路:修改發(fā)牌線程,先把1~52的數(shù)字洗亂,存放到列表中;發(fā)牌時,從列表中依次取出亂序后的數(shù)字。23多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第23頁!4.Java提供了哪些接口和類實現(xiàn)多線程機制?【答】Java主要提供了java.lang.Runnable接口和Thread線程類來實現(xiàn)多線程機制。5.一個線程對象的生命周期有哪幾種狀態(tài)構(gòu)成?各狀態(tài)之間是如何變化的?24【答】線程對象的生命周期主要包括:新建態(tài)、就緒態(tài)和運行態(tài)、阻塞態(tài)和等待態(tài)、終止態(tài)。新建態(tài)通過start()方法是線程成為運行態(tài),當(dāng)運行態(tài)遇到sleep()或wait()方法時就進(jìn)入等待態(tài),而當(dāng)sleep()時間到或通過notify()方法線程就又進(jìn)入了運行態(tài);當(dāng)運行態(tài)遇到synchronized()方法時就進(jìn)入阻塞態(tài),當(dāng)線程獲得互斥鎖使用權(quán)時就又到了運行態(tài);當(dāng)線程的run()方法結(jié)束時整個線程就進(jìn)入了終止態(tài),整個線程結(jié)束。多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第24頁!7.1操作系統(tǒng)中的進(jìn)程與線程進(jìn)程線程并發(fā)程序設(shè)計25多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第25頁!進(jìn)程的狀態(tài)2)進(jìn)程的狀態(tài)就緒(ready)態(tài):具備運行條件,等待系統(tǒng)分配資源以便運行運行(running)態(tài):進(jìn)程占用系統(tǒng)資源正在運行阻塞(blocked)態(tài):正在等待某個事件任務(wù)的完成進(jìn)程在執(zhí)行過程中的任一時刻,都處于某個狀態(tài),根據(jù)運行條件在多個狀態(tài)之間轉(zhuǎn)變。一個進(jìn)程在創(chuàng)建后處于就緒狀態(tài),獲得處理器后處于運行狀態(tài),運行中因等待事件處于阻塞狀態(tài)。26多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第26頁!2)線程的定義和屬性線程(thread)是操作系統(tǒng)進(jìn)程中能夠獨立執(zhí)行的實體(控制流),是處理器調(diào)度和分派的基本單位。線程是進(jìn)程的組成部分;同一進(jìn)程中的線程共享進(jìn)程的內(nèi)存資源和空間;并發(fā)性共享性動態(tài)性結(jié)構(gòu)性27多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第27頁!3.并發(fā)程序設(shè)計1)順序程序設(shè)計的特點執(zhí)行的順序性。環(huán)境的封閉性。執(zhí)行結(jié)果的確定性。計算結(jié)果的可再現(xiàn)性。2)并發(fā)程序設(shè)計的特點:并發(fā)性:不一定按順序執(zhí)行;結(jié)果不確定性:線程之間會相互影響,執(zhí)行結(jié)果不確定;制約性:多線程之間相互交互,需要有機制相互制約,才能得到正確結(jié)果。并發(fā)程序設(shè)計優(yōu)點:提高性能、減少開銷等28多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第28頁!7.2.1Runnable接口與Thread類Runnable接口publicinterfaceRunnable
{publicabstractvoidrun();}一個線程對象必須實現(xiàn)run()方法,描述該線程的所有活動及操作。已經(jīng)實現(xiàn)的run()方法稱為該對象的線程體29Runnable接口約定線程執(zhí)行的方法Thread類提供創(chuàng)建、管理和控制線程對象的方法多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第29頁!【例7.1】聲明繼承Thread類的奇數(shù)/偶數(shù)序列線程main是首先啟動執(zhí)行的線程兩個線程交替運行多線程程序結(jié)果具有不確定性,尤其是運行時間較長(輸出序列長)30多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第30頁!3.兩種創(chuàng)建線程方式的比較(P189)兩種方法創(chuàng)建線程(1)繼承線程Thread類
聲明一個線程類繼承Thread類,實現(xiàn)run方法,說明線程對象所執(zhí)行的操作。優(yōu)點是具有Thread類聲明的方法,且具有線程體;缺點是不適用于多繼承。(2)實現(xiàn)Runnable接口
實現(xiàn)Runnable接口說明線程體所執(zhí)行操作,同時還需要聲明Thread對象來實現(xiàn)線程創(chuàng)建、啟動等操作。補充說明:JDK5提供線程池功能31多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第31頁!4.JDK自帶線程池
(1)newFixedThreadPool創(chuàng)建一個指定工作線程數(shù)量的線程池。每當(dāng)提交一個任務(wù)就創(chuàng)建一個工作線程,如果工作線程數(shù)量達(dá)到線程池初始的最大數(shù),則將提交的任務(wù)存入到池隊列中。
(2)newCachedThreadPool創(chuàng)建一個可緩存的線程池。這種類型的線程池特點是:
1).工作線程的創(chuàng)建數(shù)量幾乎沒有限制(其實也有限制的,數(shù)目為Interger.
MAX_VALUE),
這樣可靈活的往線程池中添加線程。2).如果長時間沒有往線程池中提交任務(wù),即如果工作線程空閑了指定的時間(默認(rèn)為1分鐘),則該工作線程將自動終止。終止后,如果你又提交了新的任務(wù),則線程池重新創(chuàng)建一個工作線程。
(3)newSingleThreadExecutor創(chuàng)建一個單線程化的Executor,即只創(chuàng)建唯一的工作者線程來執(zhí)行任務(wù),如果這個線程異常結(jié)束,會有另一個取代它,保證順序執(zhí)行(我覺得這點是它的特色)。單工作線程最大的特點是可保證順序地執(zhí)行各個任務(wù),并且在任意給定的時間不會有多個線程是活動的。
(4)
newScheduleThreadPool創(chuàng)建一個定長的線程池,而且支持定時的以及周期性的任務(wù)執(zhí)行,類似于Timer。32多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第32頁!7.2.3線程對象的生命周期Thread.State類聲明的線程狀態(tài)新建態(tài)、運行態(tài)、阻塞態(tài)和等待態(tài)、終止態(tài)線程的生命周期就是從新建到終止這個過程。33多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第33頁!【例7.3】設(shè)計滾動字演示線程狀態(tài)及改變方法。本例演示線程對象的生命周期從創(chuàng)建到終止的過程,期間使用new、start()、sleep()、interrupt()等方法改變線程的狀態(tài)。本例綜合運用內(nèi)部類、圖形用戶界面、線程等多方面技術(shù)實現(xiàn)設(shè)計思想。聲明自定義面板類為私有內(nèi)部類并實現(xiàn)多個接口對象嵌套線程狀態(tài)變化代碼簡要說明:WeleJFrame構(gòu)造方法中,創(chuàng)建多個RollbyJPanel,每個對應(yīng)一個滾動字小窗口和一個線程啟動、中斷以及sleep文本框都注冊ActionListener在事件處理器中對線程進(jìn)行start、interrupt操作34多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第34頁!java.util.TimerpublicclassTimerimplementsSerializable{publicTimer()//創(chuàng)建新定時器publicvoidschedule(TimerTasktask,longdelay)
//安排在指定延遲后執(zhí)行指定的任務(wù)。publicvoidschedule(TimerTasktask,longdelay,longperiod)//安排指定的任務(wù)從指定的延遲后開始進(jìn)行重復(fù)的固定延遲執(zhí)行。publicvoidcancel()//終止此計時器,丟棄所有當(dāng)前已安排的任務(wù)。}35多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第35頁!無關(guān)線程與交互線程無關(guān)線程:并發(fā)線程操作不同的變量集合。操作的結(jié)果不會相互影響。如前面的奇偶數(shù)打印的兩個線程交互線程:并發(fā)線程共享某些變量,一個線程執(zhí)行過程中修改的變量值有可能影響到其他線程的執(zhí)行結(jié)果。交互線程的控制:由于交互線程之間有相互的制約關(guān)系,所以需要對其進(jìn)行控制,否則結(jié)果就有可能不正確36多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第36頁!【例7.5】銀行賬戶的存/取款線程設(shè)計。圖7.7并發(fā)線程共享臨界資源2.并發(fā)執(zhí)行的交互線程間存在與時間有關(guān)的錯誤結(jié)果的原因分析:有3個線程同時操作wang帳號,由于線程調(diào)度的因素,在某個線程執(zhí)行的過程中(還沒有結(jié)束),會被中斷執(zhí)行,轉(zhuǎn)而執(zhí)行另外一個線程。37多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第37頁!2.線程互斥和臨界區(qū)管理操作系統(tǒng)對共享一個變量的若干線程進(jìn)入各自臨界區(qū)有以下3個調(diào)度原則:一次至多一個線程能夠在它的臨界區(qū)內(nèi)。不能讓一個線程無限地留在它的臨界區(qū)內(nèi)。不能強迫一個線程無限地等待進(jìn)入它的臨界區(qū)。特別地,進(jìn)入臨界區(qū)的任一線程不能妨礙正等待進(jìn)入的其他線程的進(jìn)展。臨界資源:多線程共享變量代表的資源稱為臨界資源;臨界區(qū):并發(fā)線程中與共享變量有關(guān)的程序段稱為臨界區(qū)38多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第38頁!【例7.6】互斥的存/取款線程設(shè)計。圖7.9帶互斥鎖的并發(fā)線程執(zhí)行流程39多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第39頁!同步方法實現(xiàn)互斥40 publicvoidrun(){ doRun(); } publicsynchronizedvoiddoRun(){ doublehowmatch=this.account.balance(); try{ Thread.sleep(1);//花費時間
}catch(InterruptedExceptione){ } this.account.put(this.value); System.out.println(this.account.getName()+"賬戶:現(xiàn)有"+howmatch+",存入" +this.value+",余額"+this.account.balance()); }多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第40頁!線程間的協(xié)作關(guān)系:當(dāng)一個進(jìn)程中多個線程分工協(xié)作完成同一任務(wù)時,它們之間彼此有聯(lián)系,而且受其他線程執(zhí)行結(jié)果的影響。這些線程之間有直接制約關(guān)系。由于各個線程都是獨立以不可預(yù)知的速度推進(jìn),需要協(xié)作的線程必須在某些事先設(shè)置的協(xié)調(diào)點上協(xié)調(diào)各自的工作。當(dāng)某個線程到達(dá)協(xié)調(diào)點,而其他線程還未到達(dá)時,其需要阻塞自己,直到其他合作線程發(fā)來協(xié)調(diào)信號后方被喚醒繼續(xù)執(zhí)行。41多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第41頁!3.線程同步機制線程同步機制設(shè)置信號為共享變量(協(xié)調(diào)點變量)約定一個信號量(Semaphore),信號量有多種狀態(tài)。對信號量有P(測試信號量)操作和V(改變信號量)操作;線程根據(jù)信號量狀態(tài)而執(zhí)行多線程根據(jù)P操作獲得信號狀態(tài),并根據(jù)信號量狀態(tài)決定哪個線程執(zhí)行,執(zhí)行后進(jìn)行V操作如以Buffer的狀態(tài)為信號量,發(fā)送線程檢測狀態(tài)為空(P操作)才發(fā)送數(shù)據(jù),發(fā)送后將狀態(tài)只為滿(V操作)接收線程檢測狀態(tài)為滿(P操作)才接收數(shù)據(jù),接收后將狀態(tài)置空(V操作)42多線程信息學(xué)院2013級共46頁,您現(xiàn)在瀏覽的是第42頁!【例7.8】采用信號量和同步方法使發(fā)送線程與接收線程同步運行。圖7.11發(fā)送線程與
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度車輛設(shè)備研發(fā)測試平臺建設(shè)合同4篇
- 二零二五年度新能源車輛采購廉潔協(xié)議書3篇
- 個人場地租賃合同參考范文(2024版)
- 未來學(xué)校教育中的個性化學(xué)習(xí)路徑
- 二零二五年度玻璃隔斷玻璃門定制安裝合同3篇
- 線上對公金融服務(wù)平臺的營銷策略研究
- 2025年度個人投資養(yǎng)老產(chǎn)業(yè)合作協(xié)議:設(shè)施建設(shè)與運營管理3篇
- 2025年度水電安裝工程風(fēng)險評估與處理合同樣本3篇
- 二零二五年度充電樁設(shè)備研發(fā)與技術(shù)支持合同4篇
- 二零二五年度出租車司機招聘與行業(yè)規(guī)范執(zhí)行協(xié)議3篇
- 春節(jié)值班安全教育培訓(xùn)
- 華為經(jīng)營管理-華為的研發(fā)管理(6版)
- 鋰離子電池生產(chǎn)工藝流程圖
- 帶狀皰疹護(hù)理查房
- 平衡計分卡-化戰(zhàn)略為行動
- 幼兒園小班下學(xué)期期末家長會PPT模板
- 礦山安全培訓(xùn)課件-地下礦山開采安全技術(shù)
- 幼兒教師干預(yù)幼兒同伴沖突的行為研究 論文
- 湖南省省級溫室氣體排放清單土地利用變化和林業(yè)部分
- simotion輪切解決方案與應(yīng)用手冊
- DSC曲線反映PET得結(jié)晶度
評論
0/150
提交評論