優(yōu)點(diǎn):系統(tǒng)響應(yīng)更快(nio),充分利用硬件性能
缺點(diǎn):程序復(fù)雜,上下文切換損耗,更多的內(nèi)存,cpu,操作系統(tǒng)占用
線程的狀態(tài):

JMM模型-指令重排序

原理:內(nèi)存屏障 StoreLoad
64位jvm,double long不加同步指令,線程不安全

volatile:相當(dāng)于給volatile修飾的變量加鎖,保證原子性,可見(jiàn)性,順序性
CAS:通過(guò)cpu提供的指令集CMPXCHG實(shí)現(xiàn)自旋。問(wèn)題:ABA,自旋開(kāi)銷大,只能保證一個(gè)共享變量的原子操作
底層原理:unsafe老處理器會(huì)使用總線鎖,新處理器會(huì)使用緩存鎖,將cas的變量放入cpu的高速緩存L1,L2,L3緩存中
ReentrantLock:CAS+AQS,AQS(同步容器框架,雙向數(shù)組--Semaphore,CountDownLatch,ReentrantReadWriteLock,FutureTask),可以中斷,CAS判斷volatile變量state是否為0,是就獲取到鎖,不是就去隊(duì)尾排隊(duì)(CAS創(chuàng)建節(jié)點(diǎn)),超時(shí)機(jī)制,結(jié)構(gòu)是不包含head的雙向鏈表,park(thread)掛起,unpeak(thread)喚醒.非公平鎖第一次直接搶鎖,公平鎖看下有沒(méi)有在wait(),失敗都進(jìn)入阻塞隊(duì)列.

ReentrantReadWriteLock :將 state 這個(gè) 32 位的 int 值分為高 16 位(讀鎖)和低 16位(寫(xiě)鎖),分別用于共享模式和獨(dú)占模式。
ArrayBlockingQueue 底層是數(shù)組,有界隊(duì)列,如果我們要使用生產(chǎn)者-消費(fèi)者模式,這是非常好的選擇。
LinkedBlockingQueue 底層是鏈表,可以當(dāng)做無(wú)界和有界隊(duì)列來(lái)使用,所以大家不要以為它就是無(wú)界隊(duì)列。
SynchronousQueue 本身不帶有空間來(lái)存儲(chǔ)任何元素,使用上可以選擇公平模式和非公平模式。
PriorityBlockingQueue 是無(wú)界隊(duì)列,基于數(shù)組,數(shù)據(jù)結(jié)構(gòu)為二叉堆,數(shù)組第一個(gè)也是樹(shù)的根節(jié)點(diǎn)總是最小值。
Synchronized:靜態(tài)鎖class,其他鎖實(shí)例。對(duì)象結(jié)構(gòu):對(duì)象頭(markword--鎖,hash,分代,GC ,class),實(shí)例數(shù)據(jù),填充數(shù)據(jù)。四種狀態(tài):無(wú)鎖,偏向,輕鎖,重鎖。Monitor ---
image.png

final不被繼承,final成員變量表示常量,只能被賦值一次,賦值后值不再改變,不修飾構(gòu)造方法,指向引用,引用不變,引用的值是變的