




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
Java多線程處理機制本講目標進程、線程的概念及區(qū)別創(chuàng)建線程的方式線程狀態(tài)線程調(diào)度和線程控制線程優(yōu)先級線程同步死鎖的概念使用wait()和notify()在線程之間進行通信4進程、線程的概念及區(qū)別進程的概念進程一般是對操作系統(tǒng)而言。例如在windows操作系統(tǒng)中,你打開word編輯文檔的同時,可以進行迅雷下載。我們可以說此時系統(tǒng)內(nèi)部有兩個進程在運行。即windows操作系統(tǒng)是多任務操作系統(tǒng)。那么進程可以理解為程序的一次動態(tài)執(zhí)行過程。線程的概念線程一般是對某一個程序而言的,如在進行迅雷下載的同時,還可以查看已經(jīng)下載的任務列表,這兩件事沒有相互干擾,那么我們說此時這一程序中至少有兩個線程在運行。那么線程可以理解為程序中的一個運行分支。5進程、線程的概念及區(qū)別進程和線程的區(qū)別兩者的粒度不同,是兩個不同層次上的概念。進程是由操作系統(tǒng)來管理的,而線程則是在一個程序(進程)內(nèi)。不同進程的代碼內(nèi)部數(shù)據(jù)和狀態(tài)都是完全獨立的,而一個程序內(nèi)的多線程是共享用一塊內(nèi)存空間和同一組系統(tǒng)資源,有可能互相影響進程間的通信要比線程間的通信效率低。6進程、線程的概念及區(qū)別多線程的概念多線程在Java中,一個應用程序可以包含多個線程(多個分支)。每個線程執(zhí)行特定的任務,并可與其他線程并發(fā)執(zhí)行
多線程使系統(tǒng)的空轉(zhuǎn)時間最少,提高CPU利用率多線程編程環(huán)境用方便的模型隱藏CPU在任務間切換的事實7進程、線程的概念及區(qū)別多線程的概念主線程在Java程序啟動時,一個線程立刻運行,該線程通常稱為程序的主線程。主線程的重要性體現(xiàn)在兩個方面:它是產(chǎn)生其他子線程的線程。通常它必須最后完成執(zhí)行,因為它執(zhí)行各種關閉動作。8進程、線程的概念及區(qū)別classMythreadextendsThread{publicstaticvoidmain(Stringargs[]){
Threadt=Thread.currentThread();System.out.println("當前線程是:"+t);t.setName("MyJavaThread");System.out.println("當前線程名是:"+t);try{for(inti=0;i<3;i++){System.out.println(i);Thread.sleep(1500);
}}catch(InterruptedExceptione){System.out.println("主線程被中斷");}}}獲得當前線程,即主線程改變線程的內(nèi)部名稱輸出每個數(shù)后暫停1500毫秒主線程案例9創(chuàng)建線程的方式java有兩種方式實現(xiàn)多線程編程繼承Thread類實現(xiàn)Runnable接口10創(chuàng)建線程的方式方式一:繼承Thread類實現(xiàn)步驟:繼承Thread類覆蓋Thread的run()方法,將你要讓線程做的事寫在run方法中。有時候可以需要用循環(huán),使你的代碼一直執(zhí)行下去。New這個Thead子類,得到一個對象調(diào)用這個對象的start()方法。線程被啟動,開始執(zhí)行run()中的代碼。11創(chuàng)建線程的方式案例:實現(xiàn)一個定時線程,即線程在給定期間每隔一定時間(1秒),屏幕顯示時間累計數(shù)(秒數(shù)),時間結(jié)束時線程自動停止、撤消。12創(chuàng)建線程的方式方式一:實現(xiàn)Runnable接口實現(xiàn)步驟:提供一個實現(xiàn)接口Runnable的類,實現(xiàn)run()方法。得到這個類的實例A。New一個Thread對象,同時A作為參數(shù)傳入。例如:Threadrunner=newThread(A);調(diào)用start啟動線程例如:runner.start();注意點:由于繼承了Thread后,類再不能繼承別的類,所以一般我們采用實現(xiàn)Runnable接口的方法來創(chuàng)建線程。13創(chuàng)建線程的方式案例:利用第一個方式(Runnable接口)實現(xiàn)一個定時線程。14創(chuàng)建線程的方式線程兩種創(chuàng)建方式的比較實現(xiàn)Runnable接口的優(yōu)勢符合OO設計思想便于用extends繼承其他類采用繼承Thread類方法的優(yōu)點:程序代碼更簡單151、創(chuàng)建新線程,輸出0到100000。用繼承Thread的形式2、用實現(xiàn)Runnable接口的形式,創(chuàng)建線程,完成實現(xiàn)輸出task1、task2、task3。16線程的狀態(tài)線程狀態(tài)
新建(new):和其他java對象一樣,只分配內(nèi)存空間和初始化成員變量就緒(Runnable):調(diào)用了start()方法之后進入就緒狀態(tài),什么時候運行取決于線程的調(diào)度器運行(Running):獲取時間片,開始執(zhí)行run方法體阻塞(Blocked):失去cpu的占用權,讓其他線程有機會運行死亡(Dead):run方法體執(zhí)行完,正常結(jié)束或者拋出Exception或者調(diào)用stop()方法(不推薦)17線程的狀態(tài)18線程調(diào)度和線程控制線程的調(diào)度策略線程的基本控制19線程調(diào)度和線程控制線程的調(diào)度策略java中線程調(diào)度采用搶占式調(diào)度方法。搶占式調(diào)度模式:
許多線程可能是可運行狀態(tài),但只能有一個線程在運行,該線程將持續(xù)運行,知道它自行終止或者是由于其他的事件導致阻塞亦或者是出現(xiàn)高優(yōu)先級線程成為可運行的,則該線程失去CPU的占用權。20線程調(diào)度和線程控制方法方法說明start()啟動線程,使線程進入可運行狀態(tài)run()線程進入運行狀態(tài)getPriority()/setPriority()獲取/設置線程優(yōu)先級sleep()線程睡眠指定一段時間join()是Thread類中的一個實例方法。一個線程調(diào)用另一個線程的join()方法可以使自己暫停運行,直到另一個線程終止。yield()線程放棄執(zhí)行,使其他優(yōu)先級不低于此線程的線程有機會運行,它是一個靜態(tài)方法線程的控制21線程調(diào)度和線程控制方法方法說明wait()線程進入等待狀態(tài),等待被notify,是一個實例方法。notify()/notifyAll()喚醒其他的線程,是一個實例方法suspend()掛起該線程(不推薦使用)resume()喚醒該線程,與suspend相對(不推薦使用)線程的控制22線程調(diào)度和線程控制線程的控制join()方法:
23線程調(diào)度和線程控制線程的控制yield()方法:線程放棄執(zhí)行,使其他優(yōu)先級不低于此線程的線程有機會運行,它是一個靜態(tài)方法24線程調(diào)度和線程控制sleep()和wait()有什么區(qū)別?sleep是線程類(thread)的方法,導致此線程暫停執(zhí)行指定時間,給執(zhí)行機會給其他線程,但是監(jiān)控狀態(tài)依然保持,到時后會自動恢復。調(diào)用sleep不會釋放對象鎖。wait是object類的方法,對此對象調(diào)用wait方法導致本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發(fā)出notify方法(或notifyall)后本線程才進入對象鎖定池準備獲得對象鎖進入運行狀態(tài)。25線程調(diào)度和線程控制stop()和suspend()方法為何不推薦使用?反對使用stop(),是因為它不安全。它會解除由線程獲取的所有鎖定,而且如果對象處于一種不連貫狀態(tài),那么其他線程能在那種狀態(tài)下檢查和修改它們。結(jié)果很難檢查出真正的問題所在。26線程調(diào)度和線程控制stop()和suspend()方法為何不推薦使用?suspend()方法容易發(fā)生死鎖。調(diào)用suspend()的時候,目標線程會停下來,但卻仍然持有在這之前獲得的鎖定。此時,其他任何線程都不能訪問鎖定的資源,除非被“掛起”的線程恢復運行。對任何線程來說,如果它們想恢復目標線程,同時又試圖使用任何一個鎖定的資源,就會造成死鎖。所以不應該使用suspend(),而應在自己的thread類中置入一個標志,指出線程應該活動還是掛起。若標志指出線程應該掛起,便用wait()命其進入等待狀態(tài)。若標志指出線程應當恢復,則用一個notify()重新啟動線程。27線程優(yōu)先級Java中的線程優(yōu)先級是在Thread類中定義的常量NORM_PRIORITY:值為5MAX_PRIORITY:值為10MIN_PRIORITY:值為1缺省優(yōu)先級為NORM_PRIORITY有關優(yōu)先級的方法有兩個:finalvoidsetPriority(intnewp):修改線程的當前優(yōu)先級finalintgetPriority():返回線程的優(yōu)先級28線程優(yōu)先級線程繼承父類的優(yōu)先級有關優(yōu)先級的原則:優(yōu)先級高者優(yōu)先優(yōu)先級相同的“先進先出”切換規(guī)則:自動放棄高優(yōu)先權搶占291、創(chuàng)建3個線程分別輸出0到3,但是3個線程要設為不同的優(yōu)先級,分別為Thread.MAX_PRIORITY、Thread.NORM_PRIORITY、Thread.MIN_PRIORITY。測試是哪個線程優(yōu)先搶占cpu。30線程同步概念:有時兩個或多個線程可能會試圖同時訪問一個資源例如,一個線程可能嘗試從一個文件中讀取數(shù)據(jù),而另一個線程則嘗試在同一文件中修改數(shù)據(jù)在此情況下,數(shù)據(jù)可能會變得不一致為了確保在任何時間點一個共享的資源只被一個線程使用,使用了“同步”31線程同步多線程訪問共享資源案例:模擬售火車票過程32線程同步
如何在Java中獲得同步同步基于“監(jiān)視器”這一概念?!氨O(jiān)視器”是用作互斥鎖的對象。在給定時刻,只有一個線程可以擁有監(jiān)視器。Java中所有的對象都擁有自己的監(jiān)視器兩種方式實現(xiàn)同步:使用同步方法synchronizedvoidmethodA(){}使用同步塊synchronized(object){ //要同步的語句}331、使用線程同步解決買票過程出現(xiàn)的問題。34死鎖當兩個線程循環(huán)依賴于一對同步對象時將發(fā)生死鎖。
例如:
有兩個鎖A,B,一個線程拿到A鎖,請求B鎖。另一個線程拿到B鎖,請求A鎖。那么,這兩個線程將進入死鎖。進入死鎖,即程序死掉了。死鎖很少發(fā)生,但一旦發(fā)生就很難調(diào)試。351、死鎖案例演示36使用wait()、notify()在線程間通信
wait-notify機制-1為避免輪流檢測,Java提供了一個精心設計的線程間通信機制,使用wait()、notify()和notifyAll()方法這些方法是作為Object類中的final方法實現(xiàn)的這三個方法僅在synchronized方法中才能被調(diào)用37使用wait()和notify()在線程間通信wait-notify機制-2wait()方法告知被調(diào)用的線程退出監(jiān)視器并進入等待狀態(tài),直到其他線程進入相
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中式面點制作(視頻課)知到課后答案智慧樹章節(jié)測試答案2025年春洛浦縣中等職業(yè)技術學校
- 海南外國語職業(yè)學院《建筑設計與構造(2)》2023-2024學年第二學期期末試卷
- 長沙民政職業(yè)技術學院《大氣污染控制工程》2023-2024學年第二學期期末試卷
- 柳州職業(yè)技術學院《材料連接原理與技術》2023-2024學年第二學期期末試卷
- 廈門海洋職業(yè)技術學院《工程地質(zhì)(一)》2023-2024學年第二學期期末試卷
- 淮北職業(yè)技術學院《漆畫創(chuàng)作》2023-2024學年第二學期期末試卷
- 古代輿論溝通機制
- 構建人類命運共同體的重要性與必要性
- 高壓水槍沖洗施工方案
- 牌樓建筑修繕施工方案
- 巧繪節(jié)氣圖(教學設計)-2024-2025學年二年級上冊綜合實踐活動蒙滬版
- 《2024年 《法學引注手冊》示例》范文
- 2022年4月07138工程造價與管理試題及答案含解析
- 氣管插管操作并發(fā)癥
- JT∕T 795-2023 事故汽車修復技術規(guī)范
- 預防接種門診驗收表4-副本
- 2024年交管12123學法減分考試題庫及完整答案(典優(yōu))
- 數(shù)智時代的AI人才糧倉模型解讀白皮書(2024版)
- (2024年)高中化學校本課程教材《綠色化學》
- 中醫(yī)-血家藥方四物湯
- 2024年北師大版八年級下冊數(shù)學第二章綜合檢測試卷及答案
評論
0/150
提交評論