版權(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線程的概念與POSIX標(biāo)準(zhǔn)
?6.1.1線程的概念
?6.1.2線程的POSIX標(biāo)準(zhǔn)
■6.2多線程的Java實(shí)現(xiàn)
?6.2.1線程的創(chuàng)建方法
?6.2.2線程的狀態(tài)
■6.3互斥線程間的同步機(jī)制
?6.3.1多線程帶來(lái)的沖突問(wèn)題
?6.3.2共享資源合理使用的實(shí)現(xiàn)
?6.3.3按同步協(xié)調(diào)程度劃分的線程間的關(guān)系
2011-7-82
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
6.1線程的概念與POSIX標(biāo)準(zhǔn)
線程的概念
-線程其實(shí)是控制線程(Threadof
control)的簡(jiǎn)寫(xiě)。
■控制線程就是程序運(yùn)行時(shí)的路徑,是在一
個(gè)程序中與其它控制線程無(wú)關(guān)的能夠獨(dú)立
運(yùn)行的代碼片段。
■與線程有關(guān)的幾個(gè)名詞:
?進(jì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ù)的程序要訪
問(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ì)教程
基于線程的多任務(wù)處理環(huán)境
■線程是輕量級(jí)實(shí)體,由寄存器、堆棧和某些數(shù)據(jù)組成。進(jìn)程
結(jié)構(gòu)的其余部分由所有的線程所共享:如地址空間、文件描
述符等——它們共享相同的地址空間并且共同分享同一個(gè)進(jìn)
程。線程間通信是便宜的,線程間的轉(zhuǎn)換也是低成本的。
2011-7-86
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
線程并發(fā)
■并發(fā)性(Concurrency)是兩個(gè)或多個(gè)線程(或傳統(tǒng)的進(jìn)
程)可以同時(shí)在執(zhí)行代碼之中;可以是相同的代碼,也可
以是不同的代碼。這些線程可以一次執(zhí)行,也可以多次執(zhí)
行,即一個(gè)已開(kāi)始執(zhí)行但被中斷,而另外一個(gè)已開(kāi)始了。
-但在給定的時(shí)間點(diǎn)上,只有一個(gè)在CPU在處理一個(gè)線程。
2011-7-87
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
線程并行
-并行性(Parallelism)是針對(duì)多處理器環(huán)境而言的,
是指兩個(gè)或多個(gè)線程真正同時(shí)運(yùn)行在不同的CPU上。
■在多處理器機(jī)上,很多不同的線程可以并行運(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ì)教程
線程的POSIX標(biāo)準(zhǔn)
2011-7-8
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
6.2多線程的Java實(shí)現(xiàn)
主線程
■通過(guò)調(diào)用Thread類(lèi)的currentThread方法
來(lái)查看主線程:
?Thread.currentThread()
■舉例:MainThread.java
2011-7-812
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
創(chuàng)建線程有兩種方式
-通過(guò)直接擴(kuò)展Thread類(lèi)來(lái)直接創(chuàng)建線程:
?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)建線程:
?publicclassBidRunimplementsRunnable
?newThread(newBidRun(10zlOOO)).start()
?舉例:BidRun.java,Auction.java
2011-7-813
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
采用間接創(chuàng)建線程的原因
■第一個(gè)理由是我們并不改變線程本身的性
質(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ì)教程
線程內(nèi)容的定義
■覆蓋或?qū)崿F(xiàn)njn方法?..
■start方法一般只用來(lái)觸發(fā)線程,把線程的
內(nèi)容放在這個(gè)方法體中不太規(guī)范,而且這樣
做實(shí)際上線程不會(huì)競(jìng)爭(zhēng)運(yùn)行。
?思考與練習(xí)11
■如果直接調(diào)用run方法,線程也不會(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)一些方法使用的例子
■線程優(yōu)先級(jí):PriorityTest.java
■創(chuàng)建守護(hù)線程:DaemonTest.java
■線程歹(J表:ThreadList.java
■線程組信息:ThreadGroupTest.java
2011-7-816
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
線程的狀態(tài)
2011-7-8
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
與線程所處狀態(tài)有關(guān)的方法舉例
■join方法的例子:JoinTestJava
■yield方法的例子:YieldTest.java
■interrupt方法的例子:IntemjptTest.java
2011-7-818
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
6.3互斥線程間的同步機(jī)制
多線程帶來(lái)的沖突問(wèn)題
-實(shí)例變量也是共享的
?舉例:ThreadSharedData.java
■使用volatile關(guā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在線程中使用不同的實(shí)例對(duì)象,若用
Threadt2=newThread
this,實(shí)際上兩個(gè)線程分別使用一個(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è)線程對(duì)兩個(gè)同步對(duì)象有循環(huán)依
賴(lài)關(guān)系時(shí)。
■例如,假定一個(gè)線程進(jìn)入了對(duì)象X的對(duì)象鎖而另
一個(gè)線程進(jìn)入了對(duì)象Y的對(duì)象鎖。如果X的線程試
圖調(diào)用Y的同步方法,它將像預(yù)料的一樣被鎖定。
而Y的線程同樣希望調(diào)用X的一些同步方法,線程
永遠(yuǎn)等待,因?yàn)闉榈竭_(dá)X,必須釋放自己的Y的鎖
定以使第一個(gè)線程可以完成。
■舉例:DeadLock.java
2011-7-826
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
按同步協(xié)調(diào)程度劃分的線程間的關(guān)系
-不相關(guān)的線程
■相關(guān)但不需要同步的線程
■互斥線程
-交互式互斥線程
2011-7-827
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
不相關(guān)的線程:Drinkerjava
2011-7-828
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
相關(guān)但無(wú)需同步線程:Kid.java
2011-7-829
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
互斥線程:Customerjava
2011-7-830
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
交互式的互斥線程: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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國(guó)射頻功率放大器行業(yè)開(kāi)拓第二增長(zhǎng)曲線戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國(guó)企業(yè)管理培訓(xùn)行業(yè)營(yíng)銷(xiāo)創(chuàng)新戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國(guó)新型健康服務(wù)行業(yè)資本規(guī)劃與股權(quán)融資戰(zhàn)略制定與實(shí)施研究報(bào)告
- 新形勢(shì)下高空作業(yè)平臺(tái)行業(yè)快速做大市場(chǎng)規(guī)模戰(zhàn)略制定與實(shí)施研究報(bào)告
- 比較文學(xué)情境母題研究
- 建設(shè)無(wú)煙學(xué)校宣傳資料
- 建設(shè)培訓(xùn)中心規(guī)章制度
- 初中地理會(huì)考知識(shí)點(diǎn)
- 2025年中國(guó)電信運(yùn)營(yíng)商行業(yè)全景評(píng)估及投資規(guī)劃建議報(bào)告
- 云南省楚雄州2023-2024學(xué)年九年級(jí)上學(xué)期期末教育學(xué)業(yè)質(zhì)量監(jiān)測(cè)化學(xué)試卷
- 煤礦巷道噴涂技術(shù)方案
- 新版中國(guó)腦出血診治指南
- 高校搬遷可行性方案
- 充電樁選址優(yōu)化與布局規(guī)劃
- 科技產(chǎn)業(yè)園項(xiàng)目投資計(jì)劃書(shū)
- 苗木采購(gòu)?fù)稑?biāo)方案(技術(shù)標(biāo))
- JJF 1030-2023溫度校準(zhǔn)用恒溫槽技術(shù)性能測(cè)試規(guī)范
- 輸變電工程安全文明施工設(shè)施標(biāo)準(zhǔn)化配置表
- 一銷(xiāo)基氯苯生產(chǎn)車(chē)間硝化工段工藝初步設(shè)計(jì)
- 自動(dòng)控制原理仿真實(shí)驗(yàn)課程智慧樹(shù)知到課后章節(jié)答案2023年下山東大學(xué)
- 【城市軌道交通運(yùn)營(yíng)安全管理研究9200字(論文)】
評(píng)論
0/150
提交評(píng)論