Java高并發(fā)程序設(shè)計(jì)_第1頁
Java高并發(fā)程序設(shè)計(jì)_第2頁
Java高并發(fā)程序設(shè)計(jì)_第3頁
Java高并發(fā)程序設(shè)計(jì)_第4頁
Java高并發(fā)程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、Java 高并發(fā)程序設(shè)計(jì)第一課 前沿 在計(jì)算密集型的領(lǐng)域中非常適用并行程序 多核CPU的產(chǎn)生促使了并行程序的設(shè)計(jì),摩爾定律的失效,芯片的性能不能提高,4GHz已經(jīng)是當(dāng)下最高的頻率,從而產(chǎn)生多核CPU的出現(xiàn)。 活鎖 : 兩個資源 A、B, 進(jìn)程1和2 分別占用A和B時發(fā)現(xiàn)不能工作, 就同時釋放掉,然后又同時分別占用B和A 如此反復(fù)!出現(xiàn)活鎖 阻塞:第二課 Java并行程序基礎(chǔ) 線程是比進(jìn)程更細(xì)粒度的執(zhí)行單元, 可以說是屬于進(jìn)程的一個子集7, Thread 類的run()方法實(shí)現(xiàn)于Runnable 接口, 如果直接調(diào)用run()方法, 不會啟動新的線程, 而是在當(dāng)前線程下運(yùn)行 , start()

2、方法會開啟一個新的線程。兩種方式 , 1 重載run方法 2,實(shí)現(xiàn)Ruanable接口 8, Thread. Interrupt() 是一種比較的讓線程終止的方法 優(yōu)雅的方法 , 不會立刻停止掉該程序 , 根據(jù)程序的設(shè)計(jì),而是根據(jù)該程序的設(shè)計(jì),當(dāng)執(zhí)行完該程序的一次循環(huán)之后, 在下次循環(huán)程序開始之前中斷, 保證該程序的數(shù)據(jù)完整性。9,try Thread.sleep(2000); catch (InterruptedException e) / /設(shè)置中斷狀態(tài),拋出異常后會清除中斷標(biāo)記位e.printStackTrace();10,查看當(dāng)前被掛起的進(jìn)程命令 jps 查看進(jìn)程中具體線程的信息 js

3、tack 588011, 等待線程結(jié)束 join(),其本質(zhì)是 判斷線程是否還存活, 如果一直存活那么通知調(diào)用該線程的其他線程等待, 如果結(jié)束有JVM 調(diào)用notifyAll()喚醒所有等待該線程的線程。f (millis = 0) while (isAlive() wait(0); 謙讓 yield()12,守護(hù)線程 在后臺默默的完成一些系統(tǒng)性的服務(wù), 比如垃圾回收與JIT線程等。但非守護(hù)線程結(jié)束時, JVM不會因?yàn)槭刈o(hù)線程而繼續(xù)執(zhí)行, 隨之而推出。13,線程優(yōu)先級的運(yùn)行時候 只是在概率上發(fā)生的可能下要大!14,synchronized 加鎖的三種方式。 對象實(shí)例加鎖 實(shí)例方法加鎖 類級別實(shí)

4、例方法加鎖第三課 Java內(nèi)存模型和線程安全 同一個操作在兩條不同的指令之間是不能夠一起做的,因?yàn)樗麄儠褂猛粋€硬件設(shè)備. 可見性問題是各個層面優(yōu)化產(chǎn)生的 Java并發(fā)編程的 的三個重要的概念。 原子性 可見性 有序性 ,并發(fā)程序會發(fā)生指令重排, 導(dǎo)致語句執(zhí)行順序發(fā)生變化的情況 ,雖然處理器會對指令進(jìn)行重排序,但是它會保證程序最終結(jié)果會和代碼順序執(zhí)行結(jié)果相同;指令重排序不會影響單個線程的執(zhí)行,但是會影響到線程并發(fā)執(zhí)行的正確性。 要想并發(fā)程序正確地執(zhí)行,必須要保證原子性、可見性以及有序性。只要有一個沒有被保證,就有可能會導(dǎo)致程序運(yùn)行不正確。第四課 無鎖 無鎖的性能要遠(yuǎn)好于阻塞的執(zhí)行方式 前導(dǎo)零

5、 是指 轉(zhuǎn)換成二進(jìn)制的時候 前面為零的個數(shù)(LeadingZeros) 無鎖實(shí)現(xiàn)Stack堆棧 , 見作業(yè)第五課 JDK并發(fā)包11. Reentrantlock 是屬于Synchronized的增強(qiáng)版, 多增加了一些特有的功能 2. ConcurrentHashMap 屬于高并發(fā)的解決方案 3. HashMap 發(fā)生大量沖突的時候, 會退化成一個鏈表,引起性能降低4. BlockingQueue 阻塞隊(duì)列, 會引起線程的阻塞 , 不是一個高性能的并發(fā)實(shí)現(xiàn), 內(nèi)部實(shí)現(xiàn)機(jī)制采用了加鎖 , 同時只有一個線程進(jìn)入 第六課 JDK并發(fā)包21, 線程池實(shí)現(xiàn)了對線程的復(fù)用,避免了線程的多次創(chuàng)建和銷毀, 節(jié)省了CPU處理時間。2, Java內(nèi)置線程池, Callable 與Runnable 的區(qū)別是有無返回值3, ForkJoinPool 說明該線程池是如何工作的 第七課 設(shè)計(jì)模式1, 采用靜態(tài)內(nèi)部類 來實(shí)現(xiàn)單例模式, 可以保證在StaticSingleton 類中只調(diào)用 getInstance()方法時才會初始化類 , 從而保證了在操作該類其他字段的時候, 不會被初始化。 第八課 NIO AIO 第九課 鎖的優(yōu)化1, 每一個對象 都會保存一個對象頭信息 對象頭Mark, 主要包括對象的Hash ,鎖信息,垃圾回收信息,年齡等信息。2, Integer i 對象是不可變

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論