




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
主要內(nèi)容
■6.1線(xiàn)程的概念與POSIX標(biāo)準(zhǔn)
?6.1.1線(xiàn)程的概念
?6.1.2線(xiàn)程的POSIX標(biāo)準(zhǔn)
■6.2多線(xiàn)程的Java實(shí)現(xiàn)
?6.2.1線(xiàn)程的創(chuàng)建方法
?6.2.2線(xiàn)程的狀態(tài)
■6.3互斥線(xiàn)程間的同步機(jī)制
?6.3.1多線(xiàn)程帶來(lái)的沖突問(wèn)題
?6.3.2共享資源合理使用的實(shí)現(xiàn)
?6.3.3按同步協(xié)調(diào)程度劃分的線(xiàn)程間的關(guān)系
2011-7-82
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
6.1線(xiàn)程的概念與POSIX標(biāo)準(zhǔn)
線(xiàn)程的概念
-線(xiàn)程其實(shí)是控制線(xiàn)程(Threadof
control)的簡(jiǎn)寫(xiě)。
■控制線(xiàn)程就是程序運(yùn)行時(shí)的路徑,是在一
個(gè)程序中與其它控制線(xiàn)程無(wú)關(guān)的能夠獨(dú)立
運(yùn)行的代碼片段。
■與線(xiàn)程有關(guān)的幾個(gè)名詞:
?進(jìn)程與線(xiàn)程
?并發(fā)性與并行性
?異步與同步
2011-7-84
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
基于進(jìn)程的多任務(wù)處理環(huán)境
——二局部?jī)?nèi)存;
<___________J
,----11局部?jī)?nèi)存[
<___________J
——「扁兩蔣]
■進(jìn)程是重量級(jí)的內(nèi)核級(jí)實(shí)體,需要分配它們自己獨(dú)立的地
址空間:包括有虛擬內(nèi)存映射、文件描述符、用戶(hù)ID等,
并且每個(gè)進(jìn)程都有屬于自己的這些集合。用戶(hù)的程序要訪(fǎng)
問(wèn)進(jìn)程結(jié)構(gòu)中的數(shù)據(jù)、查詢(xún)或改變狀態(tài),唯一方法是通過(guò)
系統(tǒng)調(diào)用。進(jìn)程間通信和轉(zhuǎn)換是昂貴和受限的。
2011-7-85
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
基于線(xiàn)程的多任務(wù)處理環(huán)境
■線(xiàn)程是輕量級(jí)實(shí)體,由寄存器、堆棧和某些數(shù)據(jù)組成。進(jìn)程
結(jié)構(gòu)的其余部分由所有的線(xiàn)程所共享:如地址空間、文件描
述符等——它們共享相同的地址空間并且共同分享同一個(gè)進(jìn)
程。線(xiàn)程間通信是便宜的,線(xiàn)程間的轉(zhuǎn)換也是低成本的。
2011-7-86
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
線(xiàn)程并發(fā)
■并發(fā)性(Concurrency)是兩個(gè)或多個(gè)線(xiàn)程(或傳統(tǒng)的進(jìn)
程)可以同時(shí)在執(zhí)行代碼之中;可以是相同的代碼,也可
以是不同的代碼。這些線(xiàn)程可以一次執(zhí)行,也可以多次執(zhí)
行,即一個(gè)已開(kāi)始執(zhí)行但被中斷,而另外一個(gè)已開(kāi)始了。
-但在給定的時(shí)間點(diǎn)上,只有一個(gè)在CPU在處理一個(gè)線(xiàn)程。
2011-7-87
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
線(xiàn)程并行
-并行性(Parallelism)是針對(duì)多處理器環(huán)境而言的,
是指兩個(gè)或多個(gè)線(xiàn)程真正同時(shí)運(yùn)行在不同的CPU上。
■在多處理器機(jī)上,很多不同的線(xiàn)程可以并行運(yùn)行,或者
說(shuō)是同時(shí)運(yùn)行。
2011-7-88
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
異步與同步
■異步世界需要處理同步業(yè)務(wù)
■有3個(gè)人在3個(gè)收銀臺(tái)前結(jié)帳
—?3個(gè)人結(jié)帳是異步的
?每個(gè)人信用卡在銀行業(yè)務(wù)處理時(shí)需保證同步
2011-7-89
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
線(xiàn)程的POSIX標(biāo)準(zhǔn)
2011-7-8
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
6.2多線(xiàn)程的Java實(shí)現(xiàn)
主線(xiàn)程
■通過(guò)調(diào)用Thread類(lèi)的currentThread方法
來(lái)查看主線(xiàn)程:
?Thread.currentThread()
■舉例:MainThread.java
2011-7-812
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
創(chuàng)建線(xiàn)程有兩種方式
-通過(guò)直接擴(kuò)展Thread類(lèi)來(lái)直接創(chuàng)建線(xiàn)程:
?publicclassBidThreadextendsThread
?newBidThread(10,1000).start()
?舉例:BidThread.java,Auction.java
■通過(guò)設(shè)計(jì)一個(gè)類(lèi),使之實(shí)現(xiàn)java.lang.Runnable接口,再把該接
口作為參數(shù)傳遞給Thread美的構(gòu)造方族后間接創(chuàng)建線(xiàn)程:
?publicclassBidRunimplementsRunnable
?newThread(newBidRun(10zlOOO)).start()
?舉例:BidRun.java,Auction.java
2011-7-813
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
采用間接創(chuàng)建線(xiàn)程的原因
■第一個(gè)理由是我們并不改變線(xiàn)程本身的性
質(zhì),僅覆蓋run方法,并沒(méi)有增加新的功能,
因此將Thread擴(kuò)展子類(lèi)并不恰當(dāng),這不太
符合類(lèi)擴(kuò)展規(guī)范。
■第二個(gè)理由是:如果實(shí)現(xiàn)Runnable接口,
它可能使我們所設(shè)計(jì)的類(lèi)擴(kuò)展其它類(lèi)型而
變得更為有用。
2011-7-8
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
線(xiàn)程內(nèi)容的定義
■覆蓋或?qū)崿F(xiàn)njn方法?..
■start方法一般只用來(lái)觸發(fā)線(xiàn)程,把線(xiàn)程的
內(nèi)容放在這個(gè)方法體中不太規(guī)范,而且這樣
做實(shí)際上線(xiàn)程不會(huì)競(jìng)爭(zhēng)運(yùn)行。
?思考與練習(xí)11
■如果直接調(diào)用run方法,線(xiàn)程也不會(huì)競(jìng)爭(zhēng)運(yùn)
行,必須通過(guò)start方法間接調(diào)用run方法。
?思考與練習(xí)12
2011-7-815
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
Thread類(lèi)一些方法使用的例子
■線(xiàn)程優(yōu)先級(jí):PriorityTest.java
■創(chuàng)建守護(hù)線(xiàn)程:DaemonTest.java
■線(xiàn)程歹(J表:ThreadList.java
■線(xiàn)程組信息:ThreadGroupTest.java
2011-7-816
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
線(xiàn)程的狀態(tài)
2011-7-8
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
與線(xiàn)程所處狀態(tài)有關(guān)的方法舉例
■join方法的例子:JoinTestJava
■yield方法的例子:YieldTest.java
■interrupt方法的例子:IntemjptTest.java
2011-7-818
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
6.3互斥線(xiàn)程間的同步機(jī)制
多線(xiàn)程帶來(lái)的沖突問(wèn)題
-實(shí)例變量也是共享的
?舉例:ThreadSharedData.java
■使用volatile關(guān)鍵字通知線(xiàn)程及時(shí)取得共享
變量的更新值
■共享資源使用沖突
2011-7-820
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
銀行業(yè)務(wù)中共享資源沖突示意
2011-7-8
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
共享資源合理使用的實(shí)現(xiàn)
-使用同步方法
?調(diào)用被synchronized關(guān)鍵字修飾的方法
■使用同步代碼塊
?synchronized(obj){
?//statementstobesynchronized
?}
■舉例:AccountSimulatorjava
2011-7-822
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
討論:同步代碼塊中對(duì)象鎖的選擇
-類(lèi)本身:
synchronized(TransferManager.class)
■靜態(tài)對(duì)象:
staticObjectobj=newObject();
synchronized(obj)
■實(shí)例對(duì)象:
synchronized(this)
■舉例:見(jiàn)AccountsimulatorJava
2011-7-823
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
思考
■在Accountsimulator,java例子中為什么
synchronized(this)無(wú)法上鎖以保證同步?
TransferManagertml=newTransferManager(checking,savings);
TransferManagertm2=newTransferManager(savings,checking);
Threadtl=newThread在線(xiàn)程中使用不同的實(shí)例對(duì)象,若用
Threadt2=newThread
this,實(shí)際上兩個(gè)線(xiàn)程分別使用一個(gè)對(duì)
tl.start();象鎖。\
t2.start();
2011-7-8Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程24
思考
如果要求使用synchronized(this)也能保證同
步,程序應(yīng)如何改動(dòng)?
2011-7-825
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
討論:同步導(dǎo)致的死鎖問(wèn)題
-死鎖發(fā)生在當(dāng)兩個(gè)線(xiàn)程對(duì)兩個(gè)同步對(duì)象有循環(huán)依
賴(lài)關(guān)系時(shí)。
■例如,假定一個(gè)線(xiàn)程進(jìn)入了對(duì)象X的對(duì)象鎖而另
一個(gè)線(xiàn)程進(jìn)入了對(duì)象Y的對(duì)象鎖。如果X的線(xiàn)程試
圖調(diào)用Y的同步方法,它將像預(yù)料的一樣被鎖定。
而Y的線(xiàn)程同樣希望調(diào)用X的一些同步方法,線(xiàn)程
永遠(yuǎn)等待,因?yàn)闉榈竭_(dá)X,必須釋放自己的Y的鎖
定以使第一個(gè)線(xiàn)程可以完成。
■舉例:DeadLock.java
2011-7-826
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
按同步協(xié)調(diào)程度劃分的線(xiàn)程間的關(guān)系
-不相關(guān)的線(xiàn)程
■相關(guān)但不需要同步的線(xiàn)程
■互斥線(xiàn)程
-交互式互斥線(xiàn)程
2011-7-827
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
不相關(guān)的線(xiàn)程:Drinkerjava
2011-7-828
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
相關(guān)但無(wú)需同步線(xiàn)程:Kid.java
2011-7-829
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
互斥線(xiàn)程:Customerjava
2011-7-830
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
交互式的互斥線(xiàn)程:Consumer.java
這腕利|煲對(duì)于顧客和期帕而言是
?共享’的.而且何時(shí)F的以及
何時(shí)何以可都是相夫的對(duì)
、/干這杯費(fèi)?只有客人點(diǎn)
了才會(huì)被做出來(lái),也只
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 智慧課堂省級(jí)課題申報(bào)書(shū)
- 數(shù)字孿生課題申報(bào)書(shū)
- 課題立項(xiàng)申報(bào)書(shū)幼兒園
- 孔子學(xué)堂課題申報(bào)書(shū)
- 兵團(tuán)課題申報(bào)書(shū)
- 經(jīng)濟(jì)類(lèi)課題申報(bào)書(shū)范例
- 城市更新課題申報(bào)書(shū)范本
- 醫(yī)院消防勞務(wù)合同范本
- 課題申報(bào)書(shū)是啥
- 教育科研方法課題申報(bào)書(shū)
- 高中英語(yǔ)丨高考核心高頻詞匯
- 《營(yíng)養(yǎng)均衡膳食指南》課件
- 《數(shù)智化技術(shù)應(yīng)用與創(chuàng)新》課件 第1章 走進(jìn)數(shù)智化時(shí)代
- 2025年浙江省臺(tái)州機(jī)場(chǎng)管理有限公司招聘筆試參考題庫(kù)含答案解析
- 《智能家居系統(tǒng)》課件
- 基礎(chǔ)模塊下冊(cè)《中國(guó)人民站起來(lái)了》2
- 繼電保護(hù)業(yè)務(wù)技能實(shí)操題庫(kù)
- 員工請(qǐng)假管理制度-員工請(qǐng)假管理制度范文
- 第2章 土中應(yīng)力
- (完整版)冠詞練習(xí)題及答案解析
- 約束管理制度
評(píng)論
0/150
提交評(píng)論