2020年Java多線程技術(shù)總結(jié)篇

2020年Java多線程技術(shù)總結(jié)篇

深圳達(dá)內(nèi)教育      2022-03-26 20:50:01     4

2020年Java多線程技術(shù)總結(jié)篇,  小編沒有寫到核心知識,只是簡單說明一下線程概念,多線程實(shí)現(xiàn)方式(繼承Thread,實(shí)現(xiàn)Runnable)、共享數(shù)據(jù)的不安全性、停止線

課程價格 請咨詢

上課時段: 授課校區(qū):

詳細(xì)介紹


  小編沒有寫到核心知識,只是簡單說明一下線程概念,多線程實(shí)現(xiàn)方式(繼承Thread,實(shí)現(xiàn)Runnable)、共享數(shù)據(jù)的不安全性、停止線程、線程的優(yōu)先級



  一些方法的使用如下:


  currentThread() 返回當(dāng)前代碼被哪個線程調(diào)用的信息。


  isAlive()判斷當(dāng)前線程是否處于活躍狀態(tài)。


  sleep()指定好描述讓當(dāng)前執(zhí)行線程休眠。(不會放棄鎖)


  getId()取得線程唯一標(biāo)識。


  stop()強(qiáng)制停止,不推薦使用。


  interrupt()停止線程,不能立刻停止線程,是給當(dāng)前線程打一個停止標(biāo)記。


  interrupted() 檢測當(dāng)前線程是否已經(jīng)中斷,具有清除狀態(tài)功能。


  isInterrupted() 檢測線程是否已經(jīng)中斷。


  suspend() 暫停線程


  resume() 恢復(fù)線程


  yield()放棄當(dāng)前CPU資源,讓給其他任務(wù)。


  serPriority() 方法設(shè)置優(yōu)先級,1~10個等級。


  第二章 對象及變量的并發(fā)訪問


  第二章作者主要是對并發(fā)訪問進(jìn)行描述,對synchronized關(guān)鍵的使用準(zhǔn)備了大量的用例,也驗(yàn)證了使用synchronize時的各種注意事項。


  知識點(diǎn)梳理:


  方法內(nèi)變量線程安全,實(shí)例變量非線程安全。


  使用synchronize關(guān)鍵字,對不同對象使用,會產(chǎn)生多個鎖。


  臟讀就是讀取實(shí)例變量時此值已經(jīng)被其他線程更改過。(表里不一)


  synchronize(this)鎖定的是當(dāng)前對象


  synchronize鎖重入,當(dāng)前使用synchronize時,當(dāng)一個線程得到某一個對象鎖后,再次請求此對象鎖可以再次得到鎖。在一個synchronize方法的內(nèi)部調(diào)用本類的其他synchronize方法時,可以直接得到鎖??芍厝腈i支持在父子類繼承的環(huán)境中。


  同步不具有繼承性,synchronize修飾的方法,繼承后重寫不具備synchronize特性。


  String加油常量池緩存,一般不作為synchronize的鎖對象。


  多線程的死鎖,互相等待對方。


  volatile關(guān)鍵字 保證線程可見性且提供了一定的有序性,但是無法保證原子性。在JVM底層volatile是采用“內(nèi)存屏障”來實(shí)現(xiàn)的。



  第三章 線程間通信


  多線程之間的通信,主要通過等待/通知機(jī)制實(shí)現(xiàn)。方法wait()使當(dāng)前線程等待(釋放鎖),notify()方法用于喚醒某一個線程,執(zhí)行完notify()方法后,不會馬上釋放該對象鎖,notifyAll() 用于喚醒全部線程。


  知識點(diǎn)梳理:


  當(dāng)線程呈wait()狀態(tài)時,調(diào)用線程對象的interrupt()方法會出現(xiàn)InterruptedException異常。


  wait(long)等待某一時間是否有線程對鎖進(jìn)行喚醒,如果超過時間自動喚醒。


  在經(jīng)典的生產(chǎn)者-消費(fèi)者中,使用while()替代if進(jìn)行條件判斷,因?yàn)閣ait()方法被喚醒后,是從wait()后代碼繼續(xù)執(zhí)行,不是重新執(zhí)行。


  通過管道可以進(jìn)行線程間通信:字節(jié)流。提供四個類在線程間通信。PipedInputStream,pipedOutputStream,PipedReader與PipedWrider.


  join() 方法,可以等待線程執(zhí)行完再執(zhí)行(等待線程銷毀)。


  方法join(long)內(nèi)部使用wait(long)來實(shí)現(xiàn),join(long)具有釋放鎖的特點(diǎn)。


  ThreadLocal使每個線程綁定自己的值。


  第四章 Lock的使用


  ReentrantLock的使用,相比于synchronize關(guān)鍵的使用顯得更加的靈活,并且加上了更多更強(qiáng)大的功能。調(diào)用ReentrantLock獨(dú)享的lock()方法獲取鎖,調(diào)用unlock()方法釋放鎖。


  使用Condition實(shí)現(xiàn)等待通知


  ReentrantLock實(shí)現(xiàn)等待/通知需要借助Condition對象,可以實(shí)現(xiàn)多路通知,在一個Lock對象里面創(chuàng)建多個Condition對象,注冊對象可以注冊在指定的Condition中,選擇性的對線程通知,調(diào)度線程更靈活。


  在notify/notifyAll方法進(jìn)行通知,被通告的線程由JVM隨機(jī)選擇,但是使用ReentrantLock結(jié)合Condition可以實(shí)現(xiàn)選擇性通知。


  synchronize就相當(dāng)于整個Lock對象中只有一個單一的Condition對象。


  公平鎖與非公平鎖


  鎖Lock分為“公平鎖”與“非公平鎖”,意味著線程獲取鎖的順序是否根據(jù)線程的加載順序來分配。


  可以通過ReentrantLock lock = new ReentrantLock(true) 創(chuàng)建公平鎖,ReentrantLock默認(rèn)創(chuàng)建的是非公平鎖


  知識點(diǎn)梳理:


  Object類中的wait() 相當(dāng)于Condition中的await()方法


  Object類中的notify() 相當(dāng)于Condition中的signal()方法


  Object類中的notifyAll() 相當(dāng)于Condition中的signalAll()方法


  可以通過ReentrantLock lock = new ReentrantLock(true) 創(chuàng)建公平鎖


  int getHoldCount() 查詢當(dāng)前線程保持此鎖的各式個數(shù)。


  int getQueueLength() 返回正在等待獲取此鎖定的線程估計數(shù)


  int getWaitQueueLength(Condition condition) 返回等待與此鎖相關(guān)condition的線程估計數(shù)


  boolean hasQueuedThread(Thread thread) 查詢指定的線程是否正在等待此鎖。


  boolean hasQueuedThreads() 查詢是否有線程正在等待此鎖。


  boolean hasWauters(Condition condition)查詢是否有線程正在等待與此鎖有關(guān)的condition。


  boolean isFait() 是否公平鎖


  boolean isHeldByCurrentThread()查詢當(dāng)前線程是否保存此鎖


  boolean isLocked() 查詢此鎖是否有任意線程保持。


  void lockInterruptibly() 如果當(dāng)前線程未被中斷,獲取此鎖。


  boolean tryLock() 僅在調(diào)用時鎖定未被另一個線程保持的情況下,才獲取此鎖。


  ReentrantRadWriteLock類,是一種讀寫鎖。有兩個鎖,一個是讀相關(guān)鎖,稱為共享鎖;另一個是寫相關(guān)鎖,也叫排它鎖。多個讀鎖不互斥,讀寫互斥,寫寫互斥。



       以上就是深圳達(dá)內(nèi)教育Java培訓(xùn)機(jī)構(gòu)小編介紹的“2020年Java多線程技術(shù)總結(jié)篇”的內(nèi)容,希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。


  相關(guān)內(nèi)容


  Java多線程面試題及回答(詳細(xì)總結(jié))


  java多線程的狀態(tài)轉(zhuǎn)換以及基本操作


  Java多線程學(xué)習(xí),深入解析


培訓(xùn)啦提醒您:交易時請核實(shí)對方資質(zhì),對于過大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險,謹(jǐn)防上當(dāng)。