線程面試題

1.這兩個方法來自不同的類分別是Thread和Object

  • sleep方法沒有釋放鎖中捆,而wait方法釋放了鎖喷面,使得其他線程可以使用同步控制塊或者方法
  • wait航闺,notify和notifyAll只能在同步控制方法或者同步控制塊里面使用奋刽,而sleep可以在任何地方使用
  • sleep必須捕獲異常滞磺,而wait诫欠,notify和notifyAll不需要捕獲異常

擴(kuò)充閱讀:
  Java 線程中的sleep和wait有一個共同作用涵卵,停止當(dāng)前線程任務(wù)運(yùn)行,但他們存在一定的不同荒叼,首先我們先看sleep中的構(gòu)造函數(shù)
  sleep(long millis) Causes the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds, subject to the precision and accuracy of system timers and schedulers.
  sleep(long millis, int nanos) Causes the currently executing thread to sleep (cease execution) for the specified number of milliseconds plus the specified number of nanoseconds, subject to the precision and accuracy of system timers and schedulers.
sleep方法屬于Thread類中方法轿偎,表示讓一個線程進(jìn)入睡眠狀態(tài),等待一定的時間之后被廓,自動醒來進(jìn)入到可運(yùn)行狀態(tài)坏晦,不會馬上進(jìn)入運(yùn)行狀態(tài),因?yàn)榫€程調(diào)度機(jī)制恢復(fù)線程的運(yùn)行也需要時間嫁乘,一個線程對象調(diào)用了sleep方法之后昆婿,并不會釋放他所持有的所有對象鎖,所以也就不會影響其他進(jìn)程對象的運(yùn)行蜓斧。但在sleep的過程中過程中有可能被其他對象調(diào)用它的interrupt(),產(chǎn)生InterruptedException異常仓蛆,如果你的程序不捕獲這個異常,線程就會異常終止法精,進(jìn)入TERMINATED狀態(tài)多律,如果你的程序捕獲了這個異常,那么程序就會繼續(xù)執(zhí)行catch語句塊(可能還有finally語句塊)以及以后的代碼搂蜓。
  注意sleep()方法是一個靜態(tài)方法狼荞,也就是說他只對當(dāng)前對象有效,通過t.sleep()讓t對象進(jìn)入sleep帮碰,這樣的做法是錯誤的相味,它只會是使當(dāng)前線程被sleep 而不是t線程
  wait方法
  void wait(long timeout)
  Causes the current thread to wait until either another thread invokes the notify() method or the notifyAll() method for this object, or a specified amount of time has elapsed.
  void wait(long timeout, int nanos)
  Causes the current thread to wait until another thread invokes the notify() method or the notifyAll() method for this object, or some other thread interrupts the current thread, or a certain amount of real time has elapsed.
  wait屬于Object的成員方法,一旦一個對象調(diào)用了wait方法殉挽,必須要采用notify()和notifyAll()方法喚醒該進(jìn)程;如果線程擁有某個或某些對象的同步鎖丰涉,那么在調(diào)用了wait()后拓巧,這個線程就會釋放它持有的所有同步資源,而不限于這個被調(diào)用了wait()方法的對象一死。wait()方法也同樣會在wait的過程中有可能被其他對象調(diào)用interrupt()方法而產(chǎn)生

2 .進(jìn)程和線程之間有什么不同肛度?
一個進(jìn)程是一個獨(dú)立(self contained)的運(yùn)行環(huán)境,它可以被看作一個程序或者一個應(yīng)用投慈。而線程是在進(jìn)程中執(zhí)行的一個任務(wù)(簡述:CPU的基本執(zhí)行單元)承耿。Java運(yùn)行環(huán)境是一個包含了不同的類和程序的單一進(jìn)程。線程可以被稱為輕量級進(jìn)程伪煤。線程需要較少的資源來創(chuàng)建和駐留在進(jìn)程中加袋,并且可以共享進(jìn)程中的資源。

3 .實(shí)現(xiàn)線程的方式有兩種:

  • 繼承java.lang.Thread抱既,并重寫它的run()方法职烧,將線程的執(zhí)行主體放入其中。
  • 實(shí)現(xiàn)java.lang.Runnable接口防泵,實(shí)現(xiàn)它的run()方法蚀之,并將線程的執(zhí)行主體放入其中。

4 .10 個線程和 2 個線程的同步代碼择克,哪個更容易寫恬总?
從寫代碼的角度來說,兩者的復(fù)雜度是相同的肚邢,因?yàn)橥酱a與線程數(shù)量是相互獨(dú)立的壹堰。但是同步策略的選擇依賴于線程的數(shù)量,因?yàn)樵蕉嗟木€程意味著更大的競爭骡湖,所以你需要利用同步技術(shù)贱纠,如鎖分離,這要求更復(fù)雜的代碼和專業(yè)知識响蕴。

5 .什么是線程局部變量谆焊?
線程局部變量是局限于線程內(nèi)部的變量,屬于線程自身所有浦夷,不在多個線程間共享辖试。Java 提供 ThreadLocal 類來支持線程局部變量,是一種實(shí)現(xiàn)線程安全的方式劈狐。但是在管理環(huán)境下(如 web 服務(wù)器)使用線程局部變量的時候要特別小心罐孝,在這種情況下,工作線程的生命周期比任何應(yīng)用變量的生命周期都要長肥缔。任何線程局部變量一旦在工作完成后沒有釋放莲兢,Java 應(yīng)用就存在內(nèi)存泄露的風(fēng)險。
詳細(xì)講解:ThreadLocal詳解

6 。什么是不可變對象(immutable object)改艇?Java 中怎么創(chuàng)建一個不可變對象收班?
不可變對象指對象一旦被創(chuàng)建,狀態(tài)就不能再改變谒兄。任何修改都會創(chuàng)建一個新的對象摔桦,如 String、Integer及其它包裝類舵变。不可變(Immutable)和mutable Objects的Java類或?qū)ο?/a>

7 .為什么Thread類的sleep()和yield()方法是靜態(tài)的酣溃?
Thread類的sleep()和yield()方法將在當(dāng)前正在執(zhí)行的線程上運(yùn)行。所以在其他處于等待狀態(tài)的線程上調(diào)用這些方法是沒有意義的纪隙。這就是為什么這些方法是靜態(tài)的。它們可以在當(dāng)前正在執(zhí)行的線程中工作扛或,并避免程序員錯誤的認(rèn)為可以在其他非運(yùn)行線程調(diào)用這些方法绵咱。

  • 序言:七十年代末,一起剝皮案震驚了整個濱河市熙兔,隨后出現(xiàn)的幾起案子悲伶,更是在濱河造成了極大的恐慌,老刑警劉巖住涉,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件麸锉,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門船万,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蛮位,“玉大人,你說我怎么就攤上這事葛账。” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵娩脾,是天一觀的道長。 經(jīng)常有香客問我打毛,道長柿赊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任幻枉,我火速辦了婚禮碰声,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘展辞。我一直安慰自己奥邮,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著洽腺,像睡著了一般脚粟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蘸朋,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天核无,我揣著相機(jī)與錄音,去河邊找鬼藕坯。 笑死团南,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的炼彪。 我是一名探鬼主播吐根,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼辐马!你這毒婦竟也來了拷橘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤喜爷,失蹤者是張志新(化名)和其女友劉穎冗疮,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體檩帐,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡术幔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了湃密。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诅挑。...
    茶點(diǎn)故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖勾缭,靈堂內(nèi)的尸體忽然破棺而出揍障,到底是詐尸還是另有隱情,我是刑警寧澤俩由,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布毒嫡,位于F島的核電站,受9級特大地震影響幻梯,放射性物質(zhì)發(fā)生泄漏兜畸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一碘梢、第九天 我趴在偏房一處隱蔽的房頂上張望咬摇。 院中可真熱鬧,春花似錦煞躬、人聲如沸肛鹏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽在扰。三九已至缕减,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間芒珠,已是汗流浹背桥狡。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留皱卓,地道東北人裹芝。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像娜汁,于是被迫代替她去往敵國和親嫂易。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評論 2 349

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

  • 下面是我自己收集整理的Java線程相關(guān)的面試題掐禁,可以用它來好好準(zhǔn)備面試炬搭。 參考文檔:-《Java核心技術(shù) 卷一》-...
    阿呆變Geek閱讀 14,767評論 14 507
  • 不管你是新程序員還是老手,你一定在面試中遇到過有關(guān)線程的問題穆桂。Java語言一個重要的特點(diǎn)就是內(nèi)置了對并發(fā)的支持,讓...
    堯淳閱讀 1,590評論 0 25
  • 每日一題: 線程面試題 面試率: ★★★☆☆ 面試技巧與建議 線程是操作系統(tǒng)能夠進(jìn)行運(yùn)算調(diào)度的最小單位融虽,它被包含在...
    林銳波閱讀 932評論 1 3
  • 戀愛有兩部分:一是愛情,二是生活巍佑。 第一個讓你忘我茴迁,第二個會讓你忘了情。 荷西曾問三毛:你想嫁個什么樣的人萤衰? 三毛...
    留奶閱讀 1,247評論 0 3
  • 1. 你是否還身在異鄉(xiāng)脆栋? 你是否想念著家鄉(xiāng)倦卖? 此刻的我,身在北京椿争,你在哪里呢怕膛? 我曾經(jīng),在我相識的朋友中問過他們一...
    咸魚怪閱讀 1,214評論 2 0