java課件第八章_第1頁(yè)
已閱讀1頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、,§1 線程及其創(chuàng)建,一、Java 中的線程1、幾個(gè)概念:★程序:一段靜態(tài)的代碼?!镞M(jìn)程:程序的一次動(dòng)態(tài)執(zhí)行過(guò)程?!锞€程::比進(jìn)程更小的執(zhí)行單位,一個(gè)進(jìn)程中可以存在多個(gè)線程?!锒嗑€程:同時(shí)存在幾個(gè)執(zhí)行體,按幾條不同的執(zhí)行路線共同工作的情況。,A thread is not a program; a thread runs within a program.,Two threads running concur

2、rently in a single program,虛擬CPU,線程的構(gòu)成,2、Thread類 ★虛擬的CPU由java.lang.Thread類來(lái)實(shí)現(xiàn) ★CPU所執(zhí)行的代碼,在構(gòu)造Thread類時(shí),傳遞給Thread類對(duì)象 ★CPU所處理的數(shù)據(jù),在構(gòu)造Thread類時(shí),傳遞給Thread類對(duì)象3、Runnable接口只有一個(gè)方法public void run();即線程所要執(zhí)行的代碼,二、創(chuàng)建線程

3、的兩種方法1、通過(guò)繼承Thread類 ▲從Thread類派生出一個(gè)新類 ▲覆蓋run()方法 ▲創(chuàng)建派生類的對(duì)象,調(diào)用start()方法,,,,2、通過(guò)傳遞Runnable對(duì)象 ▲定義一個(gè)類如MyTask,它實(shí)現(xiàn)了Runnable接口 ▲創(chuàng)建一個(gè)MyTask對(duì)象 ▲將該對(duì)象作為Thread構(gòu)造方法的參數(shù) ▲調(diào)用此Thread對(duì)象的start()方法,,

4、,,【注意】 ▲run()方法 規(guī)定了線程要執(zhí)行的任務(wù) 不通過(guò)直接調(diào)用 通過(guò)線程的start()方法來(lái)啟動(dòng) ▲Thread.sleep(…) static方法 線程休眠一段時(shí)間,單位為毫秒,3、兩種方法的比較 Thread ▲優(yōu)點(diǎn):簡(jiǎn)單 ▲缺點(diǎn):不能再?gòu)钠渌惱^承 Runnable優(yōu)點(diǎn): ▲將Thread類和要處理的任務(wù)的類分開(kāi) ▲還可

5、以從其它類繼承 ▲適合多個(gè)相同線程處理同一資源的情況,三、多線程一個(gè)程序中存在多個(gè)線程多個(gè)線程可以同時(shí)運(yùn)行多個(gè)線程可以共享代碼及數(shù)據(jù)例:【8-3】P190,§2 線程的調(diào)度,一、線程的狀態(tài)New(創(chuàng)建):已經(jīng)構(gòu)造了線程對(duì)象Runnable(就緒):具備了運(yùn)行的條件,但尚未分配到CPURunning(運(yùn)行):執(zhí)行run方法中的代碼Blocked(阻塞):不能進(jìn)入排隊(duì)隊(duì)列Dead(終止):

6、不具有繼續(xù)運(yùn)行的能力,,,創(chuàng)建,終止,就緒狀態(tài),運(yùn)行狀態(tài),阻塞狀態(tài),,Start(),,調(diào)度,,阻塞事件,,阻塞解除,,,二、線程調(diào)度與優(yōu)先級(jí)1、同時(shí)處于就緒狀態(tài)的線程,優(yōu)先級(jí)高的,有優(yōu)先調(diào)度的權(quán)利。2、相同優(yōu)先級(jí)的(跟JVM有關(guān))一般為先到先服務(wù)3、優(yōu)先級(jí)靜態(tài)常量Thread.MIN_PRIORITY ---- 1 Thread.MAX_PRIORITY -----10 Thread.NORM_PRIOR

7、ITY ----- 54、優(yōu)先級(jí)規(guī)則:(例:8-5)新建線程將繼承創(chuàng)建它的父線程的優(yōu)先級(jí)一般情況下,主線程具有普通優(yōu)先級(jí),三、對(duì)線程的基本控制1、結(jié)束線程 ▲ JDK1.0,stop()方法,deprecated ▲給線程設(shè)定一個(gè)標(biāo)記變量的方法,例8-62、設(shè)定線程的優(yōu)先級(jí)setPriority(int priority),3、暫時(shí)阻止線程的執(zhí)行 ▲ JDK1.0,suspend()方法,resume()

8、方法 deprecated ▲ sleep()方法:static ▲ join()方法:可以將另一個(gè)線程加入到本線程中,本線程的執(zhí)行會(huì)等待另一個(gè)線程執(zhí)行完畢 【例8-7】 ▲ yield()方法:使同優(yōu)先級(jí)的其他線程有執(zhí)行的機(jī)會(huì)。,4、Timer類,java.util.Timer類JDK1.5以上提供Schedule(TimerTask task, long delay, long period) task

9、是一個(gè)實(shí)現(xiàn)了run()方法的類 delay是指多少毫秒后開(kāi)始 period是指觸發(fā)的頻率【例8-8】,§3 線程的同步與共享,問(wèn)題:同時(shí)運(yùn)行的線程需要共享數(shù)據(jù),例:8-9。由于多線程同時(shí)操作同一個(gè)對(duì)象引起的現(xiàn)象,稱為不是線程安全的。為了防止沖突,使用一個(gè)資源時(shí)為其加鎖。,num對(duì)象,Counter1線程,Counter2線程,,,main,,num.X++;num.Y++;,num.X

10、++;num.Y++;,num.testEquals();,一、synchronized調(diào)用任何synchronized方法時(shí),對(duì)象被鎖定。在同一時(shí)刻,只能有一個(gè)線程調(diào)用特定對(duì)象的一個(gè)synchronized方法,Each object contains a single lock (also referred to as a monitor) that is automatically part of the object

11、(you don’t have to write any special code). When you call any synchronized method, that object is locked and no other synchronized method of that object can be called until the first one finishes and releases the lock .

12、-----Thinking in Java,synchronized常用用法(1)放在方法之前,此時(shí)通常將該方法中所操作的數(shù)據(jù)成員設(shè)為private。(2)在方法內(nèi)部,形成一個(gè)同步代碼塊 synchronized(對(duì)象){ …語(yǔ)句 } 表示對(duì)某對(duì)象進(jìn)行上鎖。 可以使用this。,,鎖,,二、線程間的同步控制生產(chǎn)者-消費(fèi)者問(wèn)題例:

13、8-10 //錯(cuò)誤的方法,例:8-10,有問(wèn)題的CubbyHole,,生產(chǎn)者,消費(fèi)者,,,,,,覆蓋數(shù)據(jù),,沒(méi)有數(shù)據(jù)或重復(fù)數(shù)據(jù),這樣做可以嗎?,,監(jiān)視器(monitor)實(shí)現(xiàn)同步的機(jī)制wait()方法使當(dāng)前線程處于等待狀態(tài),直到別的線程調(diào)用notify()來(lái)通知它。notify()方法喚醒等候進(jìn)入監(jiān)視器的線程。,例:8-11 //正確的方法,,,附加,Daemon線程1、Daemon線程的作用是在程序的運(yùn)行期間,在

14、后臺(tái)提供一種“常規(guī)”服務(wù)2、一旦所有非Daemon線程完成,程序也會(huì)中止運(yùn)行3、用setDaemon(true)打開(kāi)或者關(guān)閉一個(gè)線程的Daemon狀態(tài)(在start之前)例:改造例8-6,思考題:,①線程是什么?與進(jìn)程的區(qū)別? ②創(chuàng)建線程對(duì)象的方法有哪些?③線程有哪些狀態(tài),畫(huà)出狀態(tài)轉(zhuǎn)換圖。④線程的同步與共享監(jiān)視器解決什么問(wèn)題?nofity和wait解決什么問(wèn)題?會(huì)編寫Product-Consume

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論