黑馬--多線程

1.FutureTask示例代碼

????????????? FutureTask的get方法是一個阻塞方法,需要等線程代碼執(zhí)行完畢才會接著執(zhí)行蒜埋。

???????????? ? ? FutureTask的 cancel(boolean mayInterruptIfRunning) 方法是中斷線程執(zhí)行的方法课舍,傳入false表示不允許中斷正在執(zhí)行的線程,true則表示允許中斷。

???????????????? isCancelled方法表示任務(wù)是否被取消成功良漱,如果在任務(wù)正常完成前被取消成功愧口,則返回 true睦番。

???????????????? isDone方法表示任務(wù)是否已經(jīng)完成,若任務(wù)完成耍属,則返回true托嚣;

???????????????? get(long timeout, TimeUnit unit)用來獲取執(zhí)行結(jié)果,如果在指定時間內(nèi)厚骗,還沒獲取到結(jié)果示启,就直接返回null。


2.查看線程的方法

? ?? windows下: JDK提供的查看java線程的方法jps,殺死進程的方法taskkill /F /PID xxxx

3.線程上下文切換的原因

4.睡眠的線程被喚醒?

?? 4.1調(diào)用線程的interrupt()方法 如圖4-1领舰,

?? 4.2此方法還會打斷正在執(zhí)行的線程夫嗓,如圖4-2迟螺。

?? 4.3根據(jù)interrupt方法的兩階段終止設(shè)計模式如圖4-3,因為在執(zhí)行sleep的時候會清除終止標(biāo)記所以在catch中重新標(biāo)記清楚狀態(tài)為true

?? 4.4 interrupt會影響park方法的執(zhí)行如圖4-4

? ? ?????????????????????????????????????????????????????????????????????????????????????????? 圖4-1啤月,

????????????????????????????????????????????????????????????????????????????????????????? ? ? ? ? ? ? 圖4-2

??????????????????????????????????????????????????????????????????????????????????? 圖4-3

???????????????????????????????????????????????????????????????????????????????????????????????????????????? 圖4-4 ?

5.線程睡眠的方法盡量替換成? TimeUnit.SECONDS.sleep(1); 這種方式可讀性高一點

6.yield方法

(1).是會把當(dāng)前調(diào)用此方法的線程執(zhí)行權(quán)交出去煮仇,會把當(dāng)前線程從運行狀態(tài)變成就緒狀態(tài)。

(2).還是要根據(jù)操作系統(tǒng)的調(diào)度器來實現(xiàn)谎仲,有可能交出去執(zhí)行權(quán)后cup此時比較空閑浙垫,那當(dāng)前線程有可能接著拿到執(zhí)行權(quán),接著執(zhí)行郑诺。

7.join()方法 等待線程運行結(jié)束? 主線程等待t1線程運行結(jié)束?? join(long xxx)方法是限時等待

8.守護線程在主線程結(jié)束運行后夹姥,也會隨之結(jié)束運行。

9.線程的狀態(tài)(java層面是6種狀態(tài))

????? 新建辙诞,運行辙售,停止,如果線程 調(diào)用seelp方法他的狀態(tài)是 timed waiting 飞涂,調(diào)用join方法狀態(tài)是 waiting旦部,競爭鎖失敗處于阻塞狀態(tài)是blocked

????? 情況2是 調(diào)用了wait方法,會進入Monuitor中的WaitSet集合等待较店,當(dāng)調(diào)用notify或notifyAll時士八,線程會進入EntrySet集合進行競爭資源,競爭成功則進入運行狀態(tài)梁呈,失敗則是狀態(tài)9BLOCKED


10.線程安全分析

?? 10.1 局部變量不會存在線程安全問題婚度,因為不同線程調(diào)用方法都會創(chuàng)建不同的棧幀不存在數(shù)據(jù)共享問題,

? 10.2 方法內(nèi)引用全局變量也會存在線程安全問題官卡,因為不同線程使用的是同一個值蝗茁。

10.3 引用暴漏 在子類上覆蓋父類方法也可能會出現(xiàn)線程安全問題。

11.常見線程安全類

12.偏向鎖:

???? 偏向狀態(tài):

????????? Biased就是偏向狀態(tài):默認(rèn)是開啟了偏向鎖寻咒,但是會有延遲如圖 12-1?? 01代表是無鎖狀態(tài)哮翘,4秒后打印出結(jié)果已經(jīng)開啟了偏向鎖結(jié)果是101

????????? 如圖 12-2? 添加了參數(shù) -XX:BiasedLockingStartupDelay=0 關(guān)閉延遲開啟偏向鎖,在同步代碼塊中將線程id寫入對象頭毛秘,在同步代碼結(jié)束后對象頭中依然存在線程id說明當(dāng)前鎖偏向這個id線程忍坷。

????????? 如圖12-3禁用偏向鎖參數(shù) -XX:+UseBiasedLocking 此時就會直接從無鎖狀態(tài)升級成輕量級鎖。

????????? 如圖12-4調(diào)用對象的hashcode方法就會把偏向的鎖退回到無鎖狀態(tài)熔脂,因為狀態(tài)為偏向鎖的對象頭中沒有足夠的空間存儲hashcode,輕量級鎖和重量級鎖就不會柑肴,因為輕量級鎖的hash碼會存在棧內(nèi)存的所記錄里霞揉,重量級鎖會存在Monuitor對象中,解鎖的時候會還原回來晰骑。

??????? ? 如圖12-5偏向鎖的撤銷适秩,其實就是升級到了輕量級鎖绊序,這段代碼演示了升級到輕量級鎖的過程。

????????? 如圖12-6批量撤銷20次:集合中的對象已經(jīng)偏向t1了秽荞,此時讓他批量撤銷偏向的操作骤公,偏向到第20回時線程將不會再升級,jvm會進行優(yōu)化扬跋,會讓之后的對象都偏向與t2線程不再進行偏向撤銷阶捆。

????????? 如圖 12-7批量撤銷操作40次:JVM就會覺得自已確實錯了,就不該批量偏向钦听,40次之后的默認(rèn)對象將不再是偏向狀態(tài)洒试,而是不可偏向狀態(tài)。

??????????????????????????????????????????????????????????????????????????? 圖 12-1?

???????????????????????????????????????????????????????????? ???????????????????? 圖 12-2

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 圖 12-3

????????????????????????????????????????????????????????????????????????? 圖12-4

??????????????????????????????????????????????????????????????????????????????? 圖12-5

??????????????????????????????????????????????????????????????????????????????? 如圖15-6

13.wait/notify

????????? 13.1 如圖13-1 使用起來注意朴上,如果使用notifyAll的時候要避免虛假喚醒垒棋,如果喚醒的不是當(dāng)前線程,可以使用while循環(huán)的方式讓其當(dāng)前線程再次進行等待痪宰。

?????????????????????????????????????????????????????????????????????????????? 圖13-1

?????????? 原理:

13.2? 利用wait/notify 設(shè)計 保護暫停模式叼架,該模式的特點就是一對一的生產(chǎn)和消費,

?????????? 代碼gitee地址:https://gitee.com/achivedream/brief-book-code/blob/master/%E4%BF%9D%E6%8A%A4%E6%9A%82%E5%81%9C%E6%A8%A1%E5%BC%8F

13.3 利用 wait/notify 設(shè)計生產(chǎn)者消費者模式衣撬,該模式的特點不是一對一的生產(chǎn)和消費乖订,而是多對多,只要生產(chǎn)出了產(chǎn)品消費者競爭到資源就可以進行消費

???????????? 代碼gitee地址:https://gitee.com/achivedream/brief-book-code/blob/master/%E7%94%9F%E4%BA%A7%E8%80%85%E6%B6%88%E8%B4%B9%E8%80%85%E6%A8%A1%E5%BC%8F

14.park和unpark

???????? park方法會讓線程在執(zhí)行中進入等待淮韭,unpark可以將執(zhí)行了park方法的線程喚醒垢粮,他的特點是不管在park方法執(zhí)行前后都可以喚醒線程。如圖14-1

??????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖14-1

????? 特點:

15.死鎖(活躍性)

??????????? 代碼演示:

??? 15.1.查看死鎖的工具?? 打開IDEA Terminal控制臺

??????? 1.jps查看java相關(guān)的線程靠粪,再用 jstack 259592 查看線程狀態(tài)蜡吧,jvm會自己發(fā)現(xiàn)死鎖,并給出提示

?????????? JVM死鎖提示:

??????????? 2.用jconsole工具來進行查看線程死鎖狀態(tài)占键。

15.ReentrantLock S

??????? ? 15.1可打斷鎖是防止其他線程一直未獲取到鎖

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末昔善,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子畔乙,更是在濱河造成了極大的恐慌君仆,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件牲距,死亡現(xiàn)場離奇詭異返咱,居然都是意外死亡,警方通過查閱死者的電腦和手機牍鞠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門咖摹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人难述,你說我怎么就攤上這事萤晴⊥戮洌” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵店读,是天一觀的道長嗦枢。 經(jīng)常有香客問我,道長屯断,這世上最難降的妖魔是什么文虏? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮裹纳,結(jié)果婚禮上择葡,老公的妹妹穿的比我還像新娘。我一直安慰自己剃氧,他們只是感情好敏储,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著朋鞍,像睡著了一般已添。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上滥酥,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天更舞,我揣著相機與錄音,去河邊找鬼坎吻。 笑死缆蝉,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瘦真。 我是一名探鬼主播刊头,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼诸尽!你這毒婦竟也來了原杂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤您机,失蹤者是張志新(化名)和其女友劉穎穿肄,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體际看,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡咸产,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了仲闽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脑溢。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蔼囊,靈堂內(nèi)的尸體忽然破棺而出焚志,到底是詐尸還是另有隱情,我是刑警寧澤畏鼓,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布酱酬,位于F島的核電站,受9級特大地震影響云矫,放射性物質(zhì)發(fā)生泄漏膳沽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一让禀、第九天 我趴在偏房一處隱蔽的房頂上張望挑社。 院中可真熱鬧,春花似錦巡揍、人聲如沸痛阻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽阱当。三九已至,卻和暖如春糜工,著一層夾襖步出監(jiān)牢的瞬間弊添,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工捌木, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留油坝,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓刨裆,卻偏偏與公主長得像澈圈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子崔拥,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

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