【多線程】實戰(zhàn)Java高并發(fā)程序設(shè)計

第一章 Why 并行?

并行計算能應(yīng)用的兩個場景:圖像處理谎僻、服務(wù)端編程

幾個概念

同步(Synchronous)和異步(Asynchronous)

并發(fā)(Concurrency)和并行(parallelism)

臨界區(qū)

阻塞(Blocking)和非阻塞(Non-blocking)

死鎖、饑餓、活鎖

并發(fā)級別

1.阻塞想暗; 2.無饑餓; 3.無障礙帘不; 4.無鎖说莫; 5.無等待


Amdahl定律和Gustafson定律:研究并行所能帶來的性能的提升程度。


JMM(Java內(nèi)存模型)

1.原子性寞焙;2.可見性储狭;3.有序性;


第二章 Java并行基礎(chǔ)

線程狀態(tài):

New棺弊、Runnable晶密、Blocked、Waiting模她、Timed_Waiting、Terminated

終止線程不用stop();

線程中斷

public void Thread.interrupt(); ?//中斷線程

public boolean Thread.isInterrupted(); ?//判斷是否中斷

public static boolean Thread.interrupted(); ? //判斷是否中斷懂牧,并清楚當(dāng)前中斷狀態(tài)

wait()和notify():

存在于Object類侈净;

必須包含在對應(yīng)的synchronzied語句中,并且都要首先獲得目標(biāo)對象的一個監(jiān)視器僧凤。

掛起(suspend)和繼續(xù)執(zhí)行(resume)畜侦,和stop()一樣,不再使用躯保。

等待線程結(jié)束(join)和謙讓(yield)

volatile 關(guān)鍵字旋膳,可見性,不保證原子性途事;

線程組验懊、守護線程(Daemon)、線程優(yōu)先級(priority)

synchronized?關(guān)鍵字 :1.指定加鎖對象尸变;2.直接作用于實例方法义图;3.直接作用于靜態(tài)方法。

第三章 JDK并發(fā)包

重入鎖 ? java.util.concurrent.locks.ReentrantLock

lock.lock()召烂、lock.unlock()碱工、lock.lockInterruptibly()(中斷響應(yīng))、lock.tryLock()(限時等待)、公平鎖怕篷、

根據(jù)系統(tǒng)的調(diào)度历筝,一個線程會傾向于再次獲取已經(jīng)持有的鎖,這種分配方式高效廊谓,但無公平性梳猪。

Condition條件,搭配重入鎖使用蹂析。

await()舔示、singal()、awaitUninterruptibly()(在等待中不響應(yīng)中斷)

信號量(Semaphore)

acquire()电抚、tryAcquire()惕稻、release()

ReadWriteLock 讀寫鎖

倒計時器 CountDownLatch

countDown()、await()

循環(huán)柵欄 CyclicBarrier ?湊齊一批蝙叛,計數(shù)器歸零俺祠,執(zhí)行某一動作


線程池

Executor框架 ?newFixedThreadPool、newSingleThreadExecutor借帘、newCachedThreadPool蜘渣、newScheduledThreadPool...

計劃任務(wù) ?scheduleAtFixedRate、scheduleWithFixedDelay

ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler hanler)

corePoolSize: 線程池中的線程數(shù)量肺然;

maximumPoolSize: 線程池中的最大線程數(shù)量蔫缸;

keepAliveTime: 當(dāng)線程池中線程數(shù)量超過corePoolSize時,多余的空閑線程的存活時間际起。

unit: keepAliveTime的單位

workQueue:任務(wù)隊列拾碌,用于保存被提交但未被執(zhí)行的線程;

(直接提交隊列街望、有界任務(wù)隊列校翔、無界的任務(wù)隊列、優(yōu)先任務(wù)隊列)

threadFactory:線程工廠灾前,用于創(chuàng)造線程防症,一般默認;

handler:拒絕策略哎甲;

(AbortPolicy蔫敲、CallerRunsPolicy、DiscardOledestPolicy烧给、DiscardPolicy)

擴展線程池 beforeExecute()燕偶、afterExecute()、terminated()

優(yōu)化線程池線程數(shù)量

Nthreads = Ncpu * Ucpu * ( 1 + W / C ) ?= cpu數(shù)量*目標(biāo)cpu使用率*(1+等待時間與計算時間的比率)

submit() vs execute()

并發(fā)集合 java.util.concurrent

ConcurrenHashMap础嫡、CopyOnWriteArrayList指么、ConcurrentLinkedQueue酝惧、BlockingQueue、ConcurrentSkipListMap(跳表)


第四章 ?鎖的優(yōu)化

有助于提高“鎖”性能的幾點建議:

1.減小鎖持有時間伯诬;

2.減小鎖粒度晚唇;(例如hashmap,分成16塊盗似,分塊加鎖)

3.讀寫分離鎖來代替獨占鎖哩陕;(讀多寫少的情況下)

4.鎖分離;(例如LinkedBlockingQueue赫舒,把take()和put()分離)

5.鎖粗化悍及;(主要值避免循環(huán)內(nèi)反復(fù)申請鎖)

Java虛擬機對鎖的優(yōu)化:

1.鎖偏向;

2.輕量級鎖接癌;

3.自旋鎖心赶;

4.鎖消除;

ThreadLocal:

ThreadLocalMap 保存了以每個線程為key的KV缺猛,類似HashMap缨叫;

在為每個線程各分配一個SimpleDateFormat、Ramdom等時能提高性能荔燎。

無鎖

比較變換(CAS):一種與眾不同的并發(fā)策略耻姥。

CAS(V,E有咨,N)琐簇。V表示要更新的變量,E表示預(yù)期值座享,N表示新值鸽嫂;僅當(dāng)V值等于E值時,才會將V的值設(shè)為N征讲;否則什么都不做。最后都返回當(dāng)前V值橡娄。

AtomicInteger诗箍、Unsafe類、AtomicReference挽唉、AtomicStampedReference(帶時間戳的對象引用)滤祖、AtomicIntegerArray、AtomicIntegerFieldUpdater(讓普通變量也享受原子操作)

無鎖的Vector實現(xiàn)瓶籽。(較難匠童,沒看懂)

SynchronousQueue的實現(xiàn)。

避免死鎖:無鎖函數(shù)塑顺、重入鎖的中斷或限時等待...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末汤求,一起剝皮案震驚了整個濱河市俏险,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扬绪,老刑警劉巖竖独,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異挤牛,居然都是意外死亡莹痢,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門墓赴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來竞膳,“玉大人,你說我怎么就攤上這事诫硕√贡伲” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵痘括,是天一觀的道長长窄。 經(jīng)常有香客問我,道長纲菌,這世上最難降的妖魔是什么挠日? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮翰舌,結(jié)果婚禮上嚣潜,老公的妹妹穿的比我還像新娘。我一直安慰自己椅贱,他們只是感情好懂算,可當(dāng)我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著庇麦,像睡著了一般计技。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上山橄,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天垮媒,我揣著相機與錄音,去河邊找鬼航棱。 笑死睡雇,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的饮醇。 我是一名探鬼主播它抱,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼朴艰!你這毒婦竟也來了观蓄?” 一聲冷哼從身側(cè)響起混移,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蜘腌,沒想到半個月后沫屡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡撮珠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年沮脖,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芯急。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡勺届,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出娶耍,到底是詐尸還是另有隱情免姿,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布榕酒,位于F島的核電站胚膊,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏想鹰。R本人自食惡果不足惜紊婉,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辑舷。 院中可真熱鬧喻犁,春花似錦、人聲如沸何缓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碌廓。三九已至传轰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谷婆,已是汗流浹背路召。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留波材,地道東北人。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓身隐,卻偏偏與公主長得像廷区,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子贾铝,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內(nèi)容