AVA的線程教學(xué)課件_第1頁(yè)
AVA的線程教學(xué)課件_第2頁(yè)
AVA的線程教學(xué)課件_第3頁(yè)
AVA的線程教學(xué)課件_第4頁(yè)
AVA的線程教學(xué)課件_第5頁(yè)
已閱讀5頁(yè),還剩27頁(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)介

主要內(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論