關(guān)于多線程問題總結(jié)及答案五

這些多線程的問題贪绘,有些來源于各大網(wǎng)站、有些來源于自己的思考央碟∷肮啵可能有些問題網(wǎng)上有、可能有些問題對應(yīng)的答案也有亿虽、也可能有些各位網(wǎng)友也都看過菱涤,但是本文寫作的重心就是所有的問題都會按照自己的理解回答一遍,不會去看網(wǎng)上的答案洛勉,因此可能有些問題講的不對粘秆,能指正的希望大家不吝指教。

1坯认、ReadWriteLock是什么

首先明確一下翻擒,不是說ReentrantLock不好,只是ReentrantLock某些時候有局限牛哺。如果使用ReentrantLock陋气,可能本身是為了防止線程A在寫數(shù)據(jù)、線程B在讀數(shù)據(jù)造成的數(shù)據(jù)不一致引润,但這樣巩趁,如果線程C在讀數(shù)據(jù)、線程D也在讀數(shù)據(jù)淳附,讀數(shù)據(jù)是不會改變數(shù)據(jù)的议慰,沒有必要加鎖,但是還是加鎖了奴曙,降低了程序的性能别凹。

因為這個,才誕生了讀寫鎖ReadWriteLock洽糟。ReadWriteLock是一個讀寫鎖接口炉菲,ReentrantReadWriteLock是ReadWriteLock接口的一個具體實現(xiàn),實現(xiàn)了讀寫的分離坤溃,讀鎖是共享的拍霜,寫鎖是獨占的,讀和讀之間不會互斥薪介,讀和寫祠饺、寫和讀、寫和寫之間才會互斥汁政,提升了讀寫的性能道偷。

2缀旁、FutureTask是什么

這個其實前面有提到過,F(xiàn)utureTask表示一個異步運算的任務(wù)试疙。FutureTask里面可以傳入一個Callable的具體實現(xiàn)類诵棵,可以對這個異步運算的任務(wù)的結(jié)果進行等待獲取、判斷是否已經(jīng)完成祝旷、取消任務(wù)等操作履澳。當(dāng)然,由于FutureTask也是Runnable接口的實現(xiàn)類怀跛,所以FutureTask也可以放入線程池中距贷。

3、Linux環(huán)境下如何查找哪個線程使用CPU最長

這是一個比較偏實踐的問題吻谋,這種問題我覺得挺有意義的忠蝗。可以這么做:

(1)獲取項目的pid漓拾,jps或者ps -ef | grep java阁最,這個前面有講過

(2)top -H -p pid,順序不能改變

這樣就可以打印出當(dāng)前的項目骇两,每條線程占用CPU時間的百分比速种。注意這里打出的是LWP,也就是操作系統(tǒng)原生線程的線程號低千,我筆記本山?jīng)]有部署Linux環(huán)境下的Java工程配阵,因此沒有辦法截圖演示,網(wǎng)友朋友們?nèi)绻臼鞘褂肔inux環(huán)境部署項目的話示血,可以嘗試一下棋傍。

使用"top -H -p pid"+"jps pid"可以很容易地找到某條占用CPU高的線程的線程堆棧,從而定位占用CPU高的原因难审,一般是因為不當(dāng)?shù)拇a操作導(dǎo)致了死循環(huán)瘫拣。

最后提一點,"top -H -p pid"打出來的LWP是十進制的告喊,"jps pid"打出來的本地線程號是十六進制的拂铡,轉(zhuǎn)換一下,就能定位到占用CPU高的線程的當(dāng)前線程堆棧了葱绒。


4、Java編程寫一個會導(dǎo)致死鎖的程序

第一次看到這個題目斗锭,覺得這是一個非常好的問題地淀。很多人都知道死鎖是怎么一回事兒:線程A和線程B相互等待對方持有的鎖導(dǎo)致程序無限死循環(huán)下去。當(dāng)然也僅限于此了岖是,問一下怎么寫一個死鎖的程序就不知道了帮毁,這種情況說白了就是不懂什么是死鎖实苞,懂一個理論就完事兒了,實踐中碰到死鎖的問題基本上是看不出來的烈疚。

真正理解什么是死鎖黔牵,這個問題其實不難,幾個步驟:

1)兩個線程里面分別持有兩個Object對象:lock1和lock2爷肝。這兩個lock作為同步代碼塊的鎖猾浦;

2)線程1的run()方法中同步代碼塊先獲取lock1的對象鎖,Thread.sleep(xxx)灯抛,時間不需要太多金赦,50毫秒差不多了,然后接著獲取lock2的對象鎖对嚼。這么做主要是為了防止線程1啟動一下子就連續(xù)獲得了lock1和lock2兩個對象的對象鎖

3)線程2的run)(方法中同步代碼塊先獲取lock2的對象鎖夹抗,接著獲取lock1的對象鎖,當(dāng)然這時lock1的對象鎖已經(jīng)被線程1鎖持有纵竖,線程2肯定是要等待線程1釋放lock1的對象鎖的

這樣漠烧,線程1"睡覺"睡完,線程2已經(jīng)獲取了lock2的對象鎖了靡砌,線程1此時嘗試獲取lock2的對象鎖已脓,便被阻塞,此時一個死鎖就形成了乏奥。代碼就不寫了摆舟,占的篇幅有點多,Java多線程7:死鎖這篇文章里面有邓了,就是上面步驟的代碼實現(xiàn)恨诱。

點擊提供了一個死鎖的案例。

5骗炉、怎么喚醒一個阻塞的線程

如果線程是因為調(diào)用了wait()照宝、sleep()或者join()方法而導(dǎo)致的阻塞,可以中斷線程句葵,并且通過拋出InterruptedException來喚醒它厕鹃;如果線程遇到了IO阻塞,無能為力乍丈,因為IO是操作系統(tǒng)實現(xiàn)的剂碴,Java代碼并沒有辦法直接接觸到操作系統(tǒng)。

小編分類整理了許多java進階學(xué)習(xí)材料和BAT面試題轻专,需要資料的請加QQ群:731611386就能領(lǐng)取2019年java進階學(xué)習(xí)資料和BAT面試題以及《EffectiveJava》(第3版)電子版書籍忆矛。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子催训,更是在濱河造成了極大的恐慌洽议,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件漫拭,死亡現(xiàn)場離奇詭異亚兄,居然都是意外死亡,警方通過查閱死者的電腦和手機采驻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門审胚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人挑宠,你說我怎么就攤上這事菲盾。” “怎么了各淀?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵懒鉴,是天一觀的道長。 經(jīng)常有香客問我碎浇,道長临谱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任奴璃,我火速辦了婚禮悉默,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘苟穆。我一直安慰自己抄课,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布雳旅。 她就那樣靜靜地躺著跟磨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪攒盈。 梳的紋絲不亂的頭發(fā)上抵拘,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機與錄音型豁,去河邊找鬼僵蛛。 笑死,一個胖子當(dāng)著我的面吹牛迎变,可吹牛的內(nèi)容都是我干的充尉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼衣形,長吁一口氣:“原來是場噩夢啊……” “哼驼侠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤泪电,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后纪铺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體相速,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年鲜锚,在試婚紗的時候發(fā)現(xiàn)自己被綠了突诬。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡芜繁,死狀恐怖旺隙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情骏令,我是刑警寧澤蔬捷,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站榔袋,受9級特大地震影響周拐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凰兑,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一妥粟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吏够,春花似錦勾给、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至喉镰,卻和暖如春旅择,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背侣姆。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工生真, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人捺宗。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓柱蟀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蚜厉。 傳聞我的和親對象是個殘疾皇子长已,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

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

  • 前言 這篇文章主要是對多線程的問題進行總結(jié)的,因此羅列了40個多線程的問題。 這些多線程的問題术瓮,有些來源于各大網(wǎng)站...
    java成功之路閱讀 831評論 0 9
  • 前言 個人認(rèn)為康聂,學(xué)習(xí),內(nèi)容越多胞四、越雜的知識恬汁,越需要進行深刻的總結(jié),這樣才能記憶深刻辜伟,將知識變成自己的氓侧。這篇文章主要...
    touch_The_Sky閱讀 391評論 0 2
  • 前言 個人認(rèn)為,學(xué)習(xí)导狡,內(nèi)容越多约巷、越雜的知識,越需要進行深刻的總結(jié)旱捧,這樣才能記憶深刻独郎,將知識變成自己的。這篇文章主要...
    堯淳閱讀 674評論 0 17
  • 前言 Java多線程分類中寫了21篇多線程的文章廊佩,21篇文章的內(nèi)容很多囚聚,個人認(rèn)為,學(xué)習(xí)标锄,內(nèi)容越多顽铸、越雜的知識,越需...
    jackcooper閱讀 642評論 1 16
  • 桃花盛開了料皇,山莊是戀愛的慕地 一位女子左腳患著病 右手裹著有些樸素的傷痕 走去來自愛情呼喚的路上 一張淺淺藏著...
    王思苗閱讀 194評論 0 0