更新時(shí)間:2020-01-06 16:58:26 來源:動(dòng)力節(jié)點(diǎn) 瀏覽3533次
小編沒有寫到核心知識(shí),只是簡(jiǎn)單說明一下線程概念,多線程實(shí)現(xiàn)方式(繼承Thread,實(shí)現(xiàn)Runnable)、共享數(shù)據(jù)的不安全性、停止線程、線程的優(yōu)先級(jí)

一些方法的使用如下:
currentThread() 返回當(dāng)前代碼被哪個(gè)線程調(diào)用的信息。
isAlive()判斷當(dāng)前線程是否處于活躍狀態(tài)。
sleep()指定好描述讓當(dāng)前執(zhí)行線程休眠。(不會(huì)放棄鎖)
getId()取得線程唯一標(biāo)識(shí)。
stop()強(qiáng)制停止,不推薦使用。
interrupt()停止線程,不能立刻停止線程,是給當(dāng)前線程打一個(gè)停止標(biāo)記。
interrupted() 檢測(cè)當(dāng)前線程是否已經(jīng)中斷,具有清除狀態(tài)功能。
isInterrupted() 檢測(cè)線程是否已經(jīng)中斷。
suspend() 暫停線程
resume() 恢復(fù)線程
yield()放棄當(dāng)前CPU資源,讓給其他任務(wù)。
serPriority() 方法設(shè)置優(yōu)先級(jí),1~10個(gè)等級(jí)。
第二章 對(duì)象及變量的并發(fā)訪問
第二章作者主要是對(duì)并發(fā)訪問進(jìn)行描述,對(duì)synchronized關(guān)鍵的使用準(zhǔn)備了大量的用例,也驗(yàn)證了使用synchronize時(shí)的各種注意事項(xiàng)。
知識(shí)點(diǎn)梳理:
方法內(nèi)變量線程安全,實(shí)例變量非線程安全。
使用synchronize關(guān)鍵字,對(duì)不同對(duì)象使用,會(huì)產(chǎn)生多個(gè)鎖。
臟讀就是讀取實(shí)例變量時(shí)此值已經(jīng)被其他線程更改過。(表里不一)
synchronize(this)鎖定的是當(dāng)前對(duì)象
synchronize鎖重入,當(dāng)前使用synchronize時(shí),當(dāng)一個(gè)線程得到某一個(gè)對(duì)象鎖后,再次請(qǐng)求此對(duì)象鎖可以再次得到鎖。在一個(gè)synchronize方法的內(nèi)部調(diào)用本類的其他synchronize方法時(shí),可以直接得到鎖??芍厝腈i支持在父子類繼承的環(huán)境中。
同步不具有繼承性,synchronize修飾的方法,繼承后重寫不具備synchronize特性。
String加油常量池緩存,一般不作為synchronize的鎖對(duì)象。
多線程的死鎖,互相等待對(duì)方。
volatile關(guān)鍵字 保證線程可見性且提供了一定的有序性,但是無(wú)法保證原子性。在JVM底層volatile是采用“內(nèi)存屏障”來實(shí)現(xiàn)的。

第三章 線程間通信
多線程之間的通信,主要通過等待/通知機(jī)制實(shí)現(xiàn)。方法wait()使當(dāng)前線程等待(釋放鎖),notify()方法用于喚醒某一個(gè)線程,執(zhí)行完notify()方法后,不會(huì)馬上釋放該對(duì)象鎖,notifyAll() 用于喚醒全部線程。
知識(shí)點(diǎn)梳理:
當(dāng)線程呈wait()狀態(tài)時(shí),調(diào)用線程對(duì)象的interrupt()方法會(huì)出現(xiàn)InterruptedException異常。
wait(long)等待某一時(shí)間是否有線程對(duì)鎖進(jìn)行喚醒,如果超過時(shí)間自動(dòng)喚醒。
在經(jīng)典的生產(chǎn)者-消費(fèi)者中,使用while()替代if進(jìn)行條件判斷,因?yàn)閣ait()方法被喚醒后,是從wait()后代碼繼續(xù)執(zhí)行,不是重新執(zhí)行。
通過管道可以進(jìn)行線程間通信:字節(jié)流。提供四個(gè)類在線程間通信。PipedInputStream,pipedOutputStream,PipedReader與PipedWrider.
join() 方法,可以等待線程執(zhí)行完再執(zhí)行(等待線程銷毀)。
方法join(long)內(nèi)部使用wait(long)來實(shí)現(xiàn),join(long)具有釋放鎖的特點(diǎn)。
ThreadLocal使每個(gè)線程綁定自己的值。
第四章 Lock的使用
ReentrantLock的使用,相比于synchronize關(guān)鍵的使用顯得更加的靈活,并且加上了更多更強(qiáng)大的功能。調(diào)用ReentrantLock獨(dú)享的lock()方法獲取鎖,調(diào)用unlock()方法釋放鎖。
使用Condition實(shí)現(xiàn)等待通知
ReentrantLock實(shí)現(xiàn)等待/通知需要借助Condition對(duì)象,可以實(shí)現(xiàn)多路通知,在一個(gè)Lock對(duì)象里面創(chuàng)建多個(gè)Condition對(duì)象,注冊(cè)對(duì)象可以注冊(cè)在指定的Condition中,選擇性的對(duì)線程通知,調(diào)度線程更靈活。
在notify/notifyAll方法進(jìn)行通知,被通告的線程由JVM隨機(jī)選擇,但是使用ReentrantLock結(jié)合Condition可以實(shí)現(xiàn)選擇性通知。
synchronize就相當(dāng)于整個(gè)Lock對(duì)象中只有一個(gè)單一的Condition對(duì)象。
公平鎖與非公平鎖
鎖Lock分為“公平鎖”與“非公平鎖”,意味著線程獲取鎖的順序是否根據(jù)線程的加載順序來分配。
可以通過ReentrantLock lock = new ReentrantLock(true) 創(chuàng)建公平鎖,ReentrantLock默認(rèn)創(chuàng)建的是非公平鎖
知識(shí)點(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)前線程保持此鎖的各式個(gè)數(shù)。
int getQueueLength() 返回正在等待獲取此鎖定的線程估計(jì)數(shù)
int getWaitQueueLength(Condition condition) 返回等待與此鎖相關(guān)condition的線程估計(jì)數(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)用時(shí)鎖定未被另一個(gè)線程保持的情況下,才獲取此鎖。
ReentrantRadWriteLock類,是一種讀寫鎖。有兩個(gè)鎖,一個(gè)是讀相關(guān)鎖,稱為共享鎖;另一個(gè)是寫相關(guān)鎖,也叫排它鎖。多個(gè)讀鎖不互斥,讀寫互斥,寫寫互斥。

以上就是動(dòng)力節(jié)點(diǎn)Java培訓(xùn)機(jī)構(gòu)小編介紹的“2020年Java多線程技術(shù)總結(jié)篇”的內(nèi)容,希望對(duì)大家有幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)內(nèi)容
java多線程的狀態(tài)轉(zhuǎn)換以及基本操作
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)