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

下載本文檔

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

文檔簡介

1、,§1 線程及其創(chuàng)建,一、Java 中的線程1、幾個概念:★程序:一段靜態(tài)的代碼?!镞M(jìn)程:程序的一次動態(tài)執(zhí)行過程?!锞€程::比進(jìn)程更小的執(zhí)行單位,一個進(jìn)程中可以存在多個線程?!锒嗑€程:同時存在幾個執(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類來實現(xiàn) ★CPU所執(zhí)行的代碼,在構(gòu)造Thread類時,傳遞給Thread類對象 ★CPU所處理的數(shù)據(jù),在構(gòu)造Thread類時,傳遞給Thread類對象3、Runnable接口只有一個方法public void run();即線程所要執(zhí)行的代碼,二、創(chuàng)建線程

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

4、,,【注意】 ▲run()方法 規(guī)定了線程要執(zhí)行的任務(wù) 不通過直接調(diào)用 通過線程的start()方法來啟動 ▲Thread.sleep(…) static方法 線程休眠一段時間,單位為毫秒,3、兩種方法的比較 Thread ▲優(yōu)點:簡單 ▲缺點:不能再從其它類繼承 Runnable優(yōu)點: ▲將Thread類和要處理的任務(wù)的類分開 ▲還可

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

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

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

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

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

10、++;num.Y++;,num.testEquals();,一、synchronized調(diào)用任何synchronized方法時,對象被鎖定。在同一時刻,只能有一個線程調(diào)用特定對象的一個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ù)據(jù)成員設(shè)為private。(2)在方法內(nèi)部,形成一個同步代碼塊 synchronized(對象){ …語句 } 表示對某對象進(jìn)行上鎖。 可以使用this。,,鎖,,二、線程間的同步控制生產(chǎn)者-消費者問題例:

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

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

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論