【Java核心面試寶典】Day14、“線程池”高頻面試題總結(jié)!???

      網(wǎng)友投稿 742 2025-04-02

      Hello,你好呀,我是灰小猿!一個(gè)超會(huì)寫bug的程序猿!


      用堅(jiān)持締造技術(shù)、用指尖敲動(dòng)未來!

      和很多小伙伴們一樣,我也是一名奔波在Java道路上的“創(chuàng)造者”。也想靠技術(shù)來改未來,改變世界!因?yàn)槲覀儓?jiān)信每一次敲動(dòng)鍵盤都能讓生活變得更智能、世界變得更有趣!

      在此專欄《Java核心面試寶典》記錄我們備戰(zhàn)夢想的【day 14】!

      在進(jìn)程和線程的相關(guān)面試題中還有一部分是關(guān)于多線程和線程池的,也是在這一部分中比較常考察的內(nèi)容。

      1、在啟動(dòng)線程時(shí),為什么要通過調(diào)用方法start執(zhí)行方法run,而不能直接執(zhí)行方法run?

      調(diào)用方法start執(zhí)行方法run,才是多線程的工作,**如果直接執(zhí)行方法run,會(huì)被當(dāng)成一個(gè)主線程下的普通方法執(zhí)行,**而不會(huì)在某個(gè)線程中執(zhí)行,因此不是多線程工作。

      2、方法sleep、join和yield的區(qū)別有哪些?

      方法sleep的作用是使當(dāng)前線程暫停執(zhí)行一段時(shí)間,讓其他線程有機(jī)會(huì)繼續(xù)執(zhí)行;

      方法join的作用是阻塞調(diào)用該方法的線程,直到當(dāng)前線程執(zhí)行完畢后,調(diào)用該方法的線程才能繼續(xù)執(zhí)行;

      方法yield的作用是暫停當(dāng)前正在執(zhí)行的線程對(duì)象,并執(zhí)行其他線程。

      3.為什么方法wait、notify和notifyAll在Object類定義,而不在Thread類定義?

      其中主要的原因是:

      方法 wait、notify 和 notifyAll 不只是普通方法或同步工具,它們還是 Java 中兩個(gè)線程之間的通信機(jī)制。對(duì)語言設(shè)計(jì)者而言, 如果不能通過 Java 關(guān)鍵字(例如 synchronized)實(shí)現(xiàn)通信機(jī)制,同時(shí)又要確保這個(gè)機(jī)制對(duì)每個(gè)對(duì)象可用,

      那么 Object 類則是的合理的聲明位置。每個(gè)對(duì)象都可上鎖,因此方法 wait 和 notify 在 Object 類而不是 Thread 類定義。

      4、終止線程應(yīng)該使用什么方法?為什么不推薦使用stop和destroy方法來終止線程?

      終止線程應(yīng)該使用方法interrupt,使用方法stop會(huì)帶來兩個(gè)問題,

      一是清理性工作無法完成;

      二是會(huì)立即釋放所有鎖,導(dǎo)致對(duì)象狀態(tài)不一致。因此會(huì)造成不安全。

      而方法destroy除了拋出NoSuchMethodError 以外沒有做任何事情,因此無法終止線程。

      5、什么是線程池?

      線程池是一種線程的使用模式,創(chuàng)建若干個(gè)可執(zhí)行的線程放入一個(gè)池(容器)中,有任務(wù)需要處理時(shí),會(huì)提交到線程池中的任務(wù)隊(duì)列,處理完后線程并不會(huì)被銷毀,而是仍然在線程池中等待下一個(gè)任務(wù)。

      6、追問:線程池的好處有哪些?

      使用線程池有以下三點(diǎn)好處:

      降低資源消耗,重復(fù)利用線程池中已經(jīng)創(chuàng)建的資源,可以避免頻繁的創(chuàng)建和銷毀線程,從而減少資源的消耗。

      提高響應(yīng)速度,由于線程池中有已經(jīng)創(chuàng)建的線程,因此當(dāng)任務(wù)到達(dá)時(shí)可以直接執(zhí)行。不需要等待線程的創(chuàng)建。

      提高線程的可管理性,線程是稀缺資源,如果無限制的創(chuàng)建,不僅會(huì)消耗系統(tǒng)資源,還會(huì)降低系統(tǒng)的穩(wěn)定性,使用線程池可以進(jìn)行統(tǒng)一分配、調(diào)優(yōu)和監(jiān)控。

      7、說一說線程池是如何創(chuàng)建的?

      【Java核心面試寶典】Day14、“線程池”高頻面試題總結(jié)!???

      線程池的創(chuàng)建可以通過ThreadPoolExecutor類,

      ThreadPoolExecutor類有4個(gè)構(gòu)造方法,其中最一般話的構(gòu)造方法包含7個(gè)參數(shù)。

      public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)

      這7個(gè)參數(shù)的含義分別是:

      corePoolSize: 核心線程數(shù),定義了最少可以同時(shí)運(yùn)行的線程數(shù)量,當(dāng)有新的任務(wù)時(shí)就會(huì)創(chuàng)建一個(gè)線程執(zhí)行任務(wù),當(dāng)線程池中的線程數(shù)量達(dá)到corePoolSize 之后,到達(dá)的任務(wù)進(jìn)入阻塞隊(duì)列

      maximumPoolSize: 最大線程數(shù),定義了線程池中最多能創(chuàng)建的線程數(shù)量。

      keepAliveTime: 等待時(shí)間,當(dāng)線程池中的線程數(shù)量大于 corePoolSize 時(shí),如果一個(gè)線程的空閑時(shí)間達(dá)到keepAliveTime 時(shí)則會(huì)終止,直到線程池中的線程數(shù)不超過 corePoolSize。

      unit: 參數(shù)keepAliveTime 的單位。

      workQueue: 阻塞隊(duì)列,用來存儲(chǔ)等待執(zhí)行的任務(wù)。

      threadFactory: 創(chuàng)建線程的工廠。

      handler: 當(dāng)拒絕處理任務(wù)時(shí)的策略。

      8、向線程池提交任務(wù)的流程是什么?

      如果正在運(yùn)行的線程數(shù)量小于corePoolSize,則創(chuàng)建核心線程運(yùn)行這個(gè)任務(wù)。

      如果正在運(yùn)行的線程數(shù)量大于或等于corePoolSize,則將這個(gè)任務(wù)放入阻塞隊(duì)列。

      如果阻塞隊(duì)列滿了,而且正在運(yùn)行的線程數(shù)量小于maximumPoolSize,則創(chuàng)建非核心線程運(yùn)行這個(gè)任務(wù)

      如果阻塞隊(duì)列滿了,而且正在運(yùn)行的線程數(shù)量大于或等于 maximumPoolSize,則線程池拋出RejectExecutionException 異常。

      9、追問:說一說核心線程和非核心線程的區(qū)別?

      核心線程和非核心線程的最大數(shù)目在創(chuàng)建線程時(shí)被鎖定,核心線程和非核心線程的區(qū)別如下:

      向線程池提交任務(wù)時(shí),首先創(chuàng)建核心線程運(yùn)行任務(wù),直到核心線程數(shù)達(dá)到上限,然后將任務(wù)放入阻塞隊(duì)列。

      只有在核心線程數(shù)到達(dá)上限,且阻塞隊(duì)列滿的情況下,才會(huì)創(chuàng)建非核心線程運(yùn)行任務(wù)。

      10、如何關(guān)閉線程池?

      可以通過調(diào)用線程池的方法shutdown或shutdownNow關(guān)閉線程池,

      這兩個(gè)方法的原理是 遍歷線程池中的工作線程,對(duì)每個(gè)工作線程調(diào)用 interrupt 方法中斷線程,無法響應(yīng)中斷的任務(wù)可能永遠(yuǎn)無法終止。

      方法 shutDown 和 shutDownNow 有以下區(qū)別。

      方法 shutDown 將線程池的狀態(tài)設(shè)置成 SHUTDOWN,正在執(zhí)行的任務(wù)繼續(xù)執(zhí)行,沒有執(zhí)行的任務(wù)將中斷。

      方法 shutDownNow 將線程池的狀態(tài)設(shè)置成 STOP,正在執(zhí)行的任務(wù)被停止,沒有執(zhí)行的任務(wù)被返回。

      今日總結(jié)

      多線程以及線程池相關(guān)的面試其實(shí)主要就是考察是否真正的使用過多線程和線程池開發(fā),所以主要就是掌握多線程和線程池的創(chuàng)建和銷毀方法、了解線程池的原理。重點(diǎn)在于實(shí)踐。

      這方面的題目比較多,所以如果小伙伴們有遇到其他相關(guān)的面試題,歡迎在評(píng)論區(qū)留言提出,我會(huì)把大家提出的總結(jié)到文章內(nèi)`, 歡迎小伙伴們一起評(píng)論區(qū)打卡學(xué)習(xí)!小伙伴們可也在左方加我好友一起探討學(xué)習(xí)!

      我是灰小猿,我們下期見!

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:劍指Offer——分治算法
      下一篇:【PMP】8.14下午題
      相關(guān)文章
      国产精品亚洲精品久久精品| 亚洲不卡1卡2卡三卡2021麻豆| 亚洲jizzjizz在线播放久| 精品亚洲aⅴ在线观看| 亚洲人成中文字幕在线观看| 亚洲色欲色欲www在线丝| 久久亚洲中文字幕精品一区| 亚洲无线电影官网| 亚洲国产二区三区久久| 久久亚洲国产精品| 亚洲第一精品福利| 亚洲一二成人精品区| 亚洲精品免费在线观看| 亚洲天天做日日做天天欢毛片| 亚洲午夜久久久精品影院| 亚洲一本综合久久| 亚洲日韩在线视频| 久久久久久久亚洲Av无码| 久久久久久久亚洲Av无码| 亚洲伊人久久大香线蕉影院| 亚洲a视频在线观看| 亚洲熟妇自偷自拍另欧美| 亚洲黄色三级网站| 亚洲制服在线观看| 成人区精品一区二区不卡亚洲| 亚洲乱妇熟女爽到高潮的片 | 国产成人高清亚洲一区久久| yy6080久久亚洲精品| 亚洲无线一二三四区手机| 亚洲av成人片在线观看| 九月婷婷亚洲综合在线 | 亚洲av无码一区二区三区观看| 亚洲ts人妖网站| 亚洲无人区码一二三码区别图片| 国产精品亚洲AV三区| 亚洲精品麻豆av| 精品亚洲成A人在线观看青青| 亚洲XX00视频| 亚洲精品成人片在线观看精品字幕| 亚洲av无码一区二区乱子伦as| 亚洲精品国产电影午夜|