《尚硅谷多線程》課件_第1頁
《尚硅谷多線程》課件_第2頁
《尚硅谷多線程》課件_第3頁
《尚硅谷多線程》課件_第4頁
《尚硅谷多線程》課件_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

《尚硅谷多線程》課件什么是多線程?程序一個程序可以看作是一個獨(dú)立的執(zhí)行單元,它包含了執(zhí)行指令和數(shù)據(jù)。進(jìn)程一個進(jìn)程可以看作是一個運(yùn)行的程序,它擁有獨(dú)立的地址空間,資源和其他信息。線程一個線程可以看作是一個進(jìn)程中的執(zhí)行流,它共享進(jìn)程的地址空間和資源,但擁有自己的執(zhí)行棧和局部變量。多線程的作用和意義提高效率充分利用CPU資源,提高程序執(zhí)行效率。提升響應(yīng)速度避免主線程阻塞,提升用戶體驗(yàn)。支持并發(fā)操作同時(shí)處理多個請求,提高系統(tǒng)吞吐量。創(chuàng)建線程的三種方式繼承Thread類創(chuàng)建一個繼承Thread類的子類,并重寫run方法,該方法包含線程要執(zhí)行的代碼。實(shí)現(xiàn)Runnable接口創(chuàng)建一個實(shí)現(xiàn)Runnable接口的類,并實(shí)現(xiàn)run方法,該方法包含線程要執(zhí)行的代碼。使用Callable和FutureTask創(chuàng)建一個實(shí)現(xiàn)Callable接口的類,該類包含線程要執(zhí)行的任務(wù),并返回結(jié)果。繼承Thread類創(chuàng)建線程類創(chuàng)建一個繼承自Thread類的子類。重寫run()方法在子類中重寫run()方法,實(shí)現(xiàn)線程要執(zhí)行的任務(wù)。創(chuàng)建線程對象創(chuàng)建子類的對象,即線程對象。啟動線程調(diào)用線程對象的start()方法啟動線程。實(shí)現(xiàn)Runnable接口1定義接口創(chuàng)建實(shí)現(xiàn)Runnable接口的類2重寫run方法編寫線程執(zhí)行的邏輯代碼3創(chuàng)建線程對象使用Runnable類創(chuàng)建Thread對象4啟動線程調(diào)用Thread對象的start方法使用Callable和FutureTask1Callable返回值2FutureTask獲取結(jié)果3線程池管理線程Thread類常用方法start()啟動線程,調(diào)用run()方法run()線程執(zhí)行體,包含線程要執(zhí)行的代碼sleep(longmillis)讓當(dāng)前線程休眠指定時(shí)間join()等待其他線程執(zhí)行完畢線程同步概述1競態(tài)條件多個線程訪問共享資源時(shí),由于執(zhí)行順序的不確定性,可能會導(dǎo)致數(shù)據(jù)不一致性。2同步機(jī)制為了解決競態(tài)條件,需要引入同步機(jī)制,確保多個線程訪問共享資源時(shí),只有一個線程可以訪問。3同步方法可以使用同步方法或同步代碼塊來實(shí)現(xiàn)線程同步。synchronized關(guān)鍵字1線程同步synchronized關(guān)鍵字是Java中用于實(shí)現(xiàn)線程同步的主要機(jī)制。它可以確保在同一時(shí)間只有一個線程可以訪問共享資源。2互斥鎖synchronized本質(zhì)上是通過互斥鎖來實(shí)現(xiàn)的,當(dāng)一個線程獲得了某個對象的鎖,其他線程就無法訪問該對象中的被synchronized修飾的代碼塊或方法。3原子操作synchronized保證了代碼塊或方法的原子性,確保多個線程對共享資源的操作不會出現(xiàn)中間狀態(tài)。同步塊代碼塊同步使用synchronized關(guān)鍵字修飾代碼塊,保證代碼塊在同一時(shí)刻只能被一個線程訪問?;コ怄isynchronized關(guān)鍵字底層使用的是互斥鎖,每個對象都對應(yīng)一個互斥鎖。同步方法概念在方法聲明前添加**synchronized**關(guān)鍵字,表示該方法為同步方法。當(dāng)一個線程執(zhí)行同步方法時(shí),其他線程無法訪問該方法。作用同步方法能夠保證同一時(shí)間只有一個線程可以訪問該方法,從而避免多個線程對共享資源的競爭訪問。線程安全的單例模式同步機(jī)制使用synchronized關(guān)鍵字保證線程安全。懶漢式在需要時(shí)才創(chuàng)建實(shí)例,避免資源浪費(fèi)。雙重檢查提高性能,避免不必要的同步。線程池概述資源管理線程池可以有效地管理線程資源,避免頻繁創(chuàng)建和銷毀線程帶來的性能損耗。提高效率通過復(fù)用線程,可以減少線程創(chuàng)建和銷毀的時(shí)間,提高程序的運(yùn)行效率??刂撇l(fā)線程池可以限制線程數(shù)量,防止過多的線程占用系統(tǒng)資源,導(dǎo)致性能下降。線程池的好處資源重用線程池可以重復(fù)利用已創(chuàng)建的線程,避免反復(fù)創(chuàng)建和銷毀線程帶來的性能損耗。提高響應(yīng)速度線程池預(yù)先創(chuàng)建一定數(shù)量的線程,可以立即響應(yīng)新的任務(wù)請求,而不需要等待線程創(chuàng)建??刂凭€程數(shù)量線程池可以限制線程數(shù)量,防止創(chuàng)建過多的線程導(dǎo)致系統(tǒng)資源耗盡。線程池的創(chuàng)建與使用1創(chuàng)建線程池使用Executors類提供的方法創(chuàng)建不同的線程池類型,例如:固定線程數(shù)的線程池、緩存線程池、單線程池等。2提交任務(wù)使用線程池的execute()方法或submit()方法提交任務(wù)到線程池執(zhí)行。3管理線程通過線程池的shutdown()方法或shutdownNow()方法優(yōu)雅地關(guān)閉線程池。Callable和FutureCallable接口Callable接口是用于創(chuàng)建可返回結(jié)果的線程任務(wù),它提供一個call()方法來執(zhí)行任務(wù)并返回結(jié)果。Future接口Future接口表示異步計(jì)算的結(jié)果。它提供方法來檢查計(jì)算是否完成、獲取結(jié)果、以及取消計(jì)算。異步任務(wù)結(jié)果的獲取1使用FutureFuture對象提供了獲取異步任務(wù)結(jié)果的方法,例如get()方法。2處理異常可以通過get()方法拋出異常來處理異步任務(wù)執(zhí)行過程中的錯誤。3超時(shí)控制get()方法提供了超時(shí)機(jī)制,可以設(shè)置獲取結(jié)果的最大等待時(shí)間。線程死鎖產(chǎn)生的條件互斥條件多個線程競爭同一資源,且該資源每次只能被一個線程使用。請求和保持條件一個線程已經(jīng)獲得了某些資源,但又請求獲取其他資源,而這些資源正被其他線程占用。不可剝奪條件線程已經(jīng)獲得的資源,在未使用完之前,不能被其他線程強(qiáng)行搶奪。循環(huán)等待條件多個線程形成一個循環(huán)等待的資源鏈,每個線程都等待鏈中下一個線程占用的資源。預(yù)防和規(guī)避線程死鎖1避免循環(huán)等待合理的資源請求順序,打破循環(huán)依賴關(guān)系。2使用公平鎖確保線程獲取鎖的順序是公平的,避免優(yōu)先級高的線程一直獲取鎖。3設(shè)置超時(shí)時(shí)間如果線程在一定時(shí)間內(nèi)無法獲取鎖,就釋放已持有的鎖,避免長時(shí)間阻塞。4減少鎖的持有時(shí)間在獲取鎖之后盡快釋放鎖,避免長時(shí)間占用資源。線程活鎖和饑餓活鎖線程之間互相等待,無法完成任務(wù)。饑餓線程一直無法獲取到資源,處于等待狀態(tài)。線程狀態(tài)及轉(zhuǎn)換1新建(New)線程對象剛被創(chuàng)建,尚未啟動。2可運(yùn)行(Runnable)線程已啟動,正在等待被調(diào)度執(zhí)行。3運(yùn)行(Running)線程獲得CPU時(shí)間片,正在執(zhí)行任務(wù)。4阻塞(Blocked)線程正在等待某個條件,無法繼續(xù)執(zhí)行。5終止(Terminated)線程執(zhí)行完畢或遇到異常退出。守護(hù)線程后臺線程守護(hù)線程是一種特殊的線程,它的作用是為其他線程提供服務(wù)。當(dāng)所有非守護(hù)線程都終止時(shí),守護(hù)線程也會自動終止。生命周期守護(hù)線程的生命周期與非守護(hù)線程不同,它不會阻止JVM退出。線程的優(yōu)先級優(yōu)先級線程優(yōu)先級表示線程被執(zhí)行的可能性,數(shù)字越大優(yōu)先級越高。分配操作系統(tǒng)根據(jù)優(yōu)先級分配CPU時(shí)間片,高優(yōu)先級線程獲得更多時(shí)間。控制可以通過Thread.setPriority(intpriority)方法設(shè)置線程優(yōu)先級,范圍為1到10。線程中斷中斷信號通過interrupt()方法發(fā)送中斷信號,但不會立即停止線程。狀態(tài)檢查線程需主動調(diào)用isInterrupted()檢查中斷狀態(tài)并做出響應(yīng)。處理中斷根據(jù)業(yè)務(wù)邏輯,可以選擇繼續(xù)執(zhí)行、退出或拋出異常。ThreadLocal線程局部變量每個線程都有自己獨(dú)立的變量副本,互不影響。實(shí)現(xiàn)原理ThreadLocalMap存儲每個線程的變量副本,通過ThreadLocal對象作為key。應(yīng)用場景適用于需要在不同線程中保持獨(dú)立狀態(tài)的變量,例如數(shù)據(jù)庫連接池。并發(fā)包中的工具類Semaphore(信號量):控制訪問資源的線程數(shù)量。Exchanger(交換器):用于兩個線程交換數(shù)據(jù)。CountDownLatch(倒計(jì)時(shí)器):等待一組線程完成某個任務(wù)。BlockingQueue(阻塞隊(duì)列):線程安全的隊(duì)列,用于線程間通信。Atomic原子類線程安全Atomic原子類提供了線程安全的原子操作,確保了在多線程環(huán)境中數(shù)據(jù)的完整性。高效性能相比于傳統(tǒng)的同步機(jī)制,原子類通過底層的硬件指令來實(shí)現(xiàn)原子操作,提高了并發(fā)性能。常用原子類包括AtomicInteger、AtomicLong、AtomicBoolean等,用于原子操作整數(shù)、長整型和布爾值。ConcurrentHashMap線程安全ConcurrentHashMap允許多個線程安全地訪問和修改數(shù)據(jù),避免了傳統(tǒng)HashMap的線程安全問題。高并發(fā)性能ConcurrentHashMap使用分段鎖機(jī)制,將數(shù)據(jù)劃分為多個段,每個段擁有獨(dú)立的鎖,提升了并發(fā)性能。靈活的容量控制ConcurrentHashMap可以根據(jù)需要調(diào)整容量,以適應(yīng)不斷變化的數(shù)據(jù)量和并發(fā)訪問需求。并發(fā)隊(duì)列線程安全隊(duì)列并發(fā)隊(duì)列是線程安全的隊(duì)列數(shù)據(jù)結(jié)構(gòu),允許多個線程同時(shí)訪問和操作隊(duì)列,而無需擔(dān)心數(shù)據(jù)一致性和并發(fā)問題。多種實(shí)現(xiàn)并發(fā)隊(duì)列有多種實(shí)現(xiàn)方式,例如:BlockingQueue、LinkedBlockingQueue、ArrayBlockingQueue等,它們提供不同的功能和特性以滿足各種并發(fā)場景的需要。常用操作并發(fā)隊(duì)列提供了常用的操作,例如:添加元素、移除元素、獲取元素等,并提供了線程安全的同步機(jī)制以確保操作的原子性和一致性。課程總結(jié)多線程概述學(xué)習(xí)了多線程的概念、作用和意義,以及創(chuàng)建線程的三種方式。線程同步深入研究了線程同步

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論