最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java線(xiàn)程池高頻面試題總結(jié)

 更新時(shí)間:2021年08月12日 11:03:36   作者:灰小猿  
在進(jìn)程和線(xiàn)程的相關(guān)面試題中還有一部分是關(guān)于多線(xiàn)程和線(xiàn)程池的,也是在這一部分中比較常考察的內(nèi)容。本篇文章就帶你了解一下,希望能給你帶來(lái)幫助

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

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

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

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

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

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

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

其中主要的原因是:

方法 wait、notify 和 notifyAll 不只是普通方法或同步工具,它們還是 Java 中兩個(gè)線(xiàn)程之間的通信機(jī)制。對(duì)語(yǔ)言設(shè)計(jì)者而言, 如果不能通過(guò) Java 關(guān)鍵字(例如 synchronized)實(shí)現(xiàn)通信機(jī)制,同時(shí)又要確保這個(gè)機(jī)制對(duì)每個(gè)對(duì)象可用,那么 Object 類(lèi)則是的合理的聲明位置。每個(gè)對(duì)象都可上鎖,因此方法 wait 和 notify 在 Object 類(lèi)而不是 Thread 類(lèi)定義。

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

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

一是清理性工作無(wú)法完成;

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

而方法destroy除了拋出NoSuchMethodError 以外沒(méi)有做任何事情,因此無(wú)法終止線(xiàn)程。

5、什么是線(xiàn)程池?

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

6、追問(wèn):線(xiàn)程池的好處有哪些?

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

  • 降低資源消耗,重復(fù)利用線(xiàn)程池中已經(jīng)創(chuàng)建的資源,可以避免頻繁的創(chuàng)建和銷(xiāo)毀線(xiàn)程,從而減少資源的消耗。
  • 提高響應(yīng)速度,由于線(xiàn)程池中有已經(jīng)創(chuàng)建的線(xiàn)程,因此當(dāng)任務(wù)到達(dá)時(shí)可以直接執(zhí)行。不需要等待線(xiàn)程的創(chuàng)建。
  • 提高線(xiàn)程的可管理性,線(xiàn)程是稀缺資源,如果無(wú)限制的創(chuàng)建,不僅會(huì)消耗系統(tǒng)資源,還會(huì)降低系統(tǒng)的穩(wěn)定性,使用線(xiàn)程池可以進(jìn)行統(tǒng)一分配、調(diào)優(yōu)和監(jiān)控。

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

線(xiàn)程池的創(chuàng)建可以通過(guò)ThreadPoolExecutor類(lèi),

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

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

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

  • corePoolSize: 核心線(xiàn)程數(shù),定義了最少可以同時(shí)運(yùn)行的線(xiàn)程數(shù)量,當(dāng)有新的任務(wù)時(shí)就會(huì)創(chuàng)建一個(gè)線(xiàn)程執(zhí)行任務(wù),當(dāng)線(xiàn)程池中的線(xiàn)程數(shù)量達(dá)到corePoolSize 之后,到達(dá)的任務(wù)進(jìn)入阻塞隊(duì)列
  • maximumPoolSize: 最大線(xiàn)程數(shù),定義了線(xiàn)程池中最多能創(chuàng)建的線(xiàn)程數(shù)量。
  • keepAliveTime: 等待時(shí)間,當(dāng)線(xiàn)程池中的線(xiàn)程數(shù)量大于 corePoolSize 時(shí),如果一個(gè)線(xiàn)程的空閑時(shí)間達(dá)到keepAliveTime 時(shí)則會(huì)終止,直到線(xiàn)程池中的線(xiàn)程數(shù)不超過(guò) corePoolSize。
  • unit: 參數(shù)keepAliveTime 的單位。
  • workQueue: 阻塞隊(duì)列,用來(lái)存儲(chǔ)等待執(zhí)行的任務(wù)。
  • threadFactory: 創(chuàng)建線(xiàn)程的工廠。
  • handler: 當(dāng)拒絕處理任務(wù)時(shí)的策略。

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

  • 如果正在運(yùn)行的線(xiàn)程數(shù)量小于corePoolSize,則創(chuàng)建核心線(xiàn)程運(yùn)行這個(gè)任務(wù)。
  • 如果正在運(yùn)行的線(xiàn)程數(shù)量大于或等于corePoolSize,則將這個(gè)任務(wù)放入阻塞隊(duì)列。
  • 如果阻塞隊(duì)列滿(mǎn)了,而且正在運(yùn)行的線(xiàn)程數(shù)量小于maximumPoolSize,則創(chuàng)建非核心線(xiàn)程運(yùn)行這個(gè)任務(wù)
  • 如果阻塞隊(duì)列滿(mǎn)了,而且正在運(yùn)行的線(xiàn)程數(shù)量大于或等于 maximumPoolSize,則線(xiàn)程池拋出RejectExecutionException 異常。

9、追問(wèn):說(shuō)一說(shuō)核心線(xiàn)程和非核心線(xiàn)程的區(qū)別?

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

  • 向線(xiàn)程池提交任務(wù)時(shí),首先創(chuàng)建核心線(xiàn)程運(yùn)行任務(wù),直到核心線(xiàn)程數(shù)達(dá)到上限,然后將任務(wù)放入阻塞隊(duì)列。
  • 只有在核心線(xiàn)程數(shù)到達(dá)上限,且阻塞隊(duì)列滿(mǎn)的情況下,才會(huì)創(chuàng)建非核心線(xiàn)程運(yùn)行任務(wù)。

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

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

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

方法 shutDown 和 shutDownNow 有以下區(qū)別。
方法 shutDown 將線(xiàn)程池的狀態(tài)設(shè)置成 SHUTDOWN,正在執(zhí)行的任務(wù)繼續(xù)執(zhí)行,沒(méi)有執(zhí)行的任務(wù)將中斷。
方法 shutDownNow 將線(xiàn)程池的狀態(tài)設(shè)置成 STOP,正在執(zhí)行的任務(wù)被停止,沒(méi)有執(zhí)行的任務(wù)被返回。

總結(jié)

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

本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Java超詳細(xì)分析講解哈希表

    Java超詳細(xì)分析講解哈希表

    哈希表是一種根據(jù)關(guān)鍵碼去尋找值的數(shù)據(jù)映射結(jié)構(gòu),該結(jié)構(gòu)通過(guò)把關(guān)鍵碼映射的位置去尋找存放值的地方,說(shuō)起來(lái)可能感覺(jué)有點(diǎn)復(fù)雜,我想我舉個(gè)例子你就會(huì)明白了,最典型的的例子就是字典
    2022-06-06
  • MyBatis會(huì)話(huà)模塊詳解

    MyBatis會(huì)話(huà)模塊詳解

    本文主要介紹了MyBatis會(huì)話(huà)模塊詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2026-02-02
  • 詳解Java Selenium中的鍵盤(pán)控制操作

    詳解Java Selenium中的鍵盤(pán)控制操作

    這篇文章主要為大家介紹了如何使用java代碼利用Selenium 控制瀏覽器中需要用到的鍵盤(pán)操作。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-01-01
  • Kafka使用Java客戶(hù)端進(jìn)行訪問(wèn)的示例代碼

    Kafka使用Java客戶(hù)端進(jìn)行訪問(wèn)的示例代碼

    本篇文章主要介紹了Kafka使用Java客戶(hù)端進(jìn)行訪問(wèn)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • java實(shí)現(xiàn)給出分?jǐn)?shù)數(shù)組得到對(duì)應(yīng)名次數(shù)組的方法

    java實(shí)現(xiàn)給出分?jǐn)?shù)數(shù)組得到對(duì)應(yīng)名次數(shù)組的方法

    這篇文章主要介紹了java實(shí)現(xiàn)給出分?jǐn)?shù)數(shù)組得到對(duì)應(yīng)名次數(shù)組的方法,涉及java針對(duì)數(shù)組的遍歷、排序及運(yùn)算的相關(guān)技巧,需要的朋友可以參考下
    2015-07-07
  • 幾種SpringBoot的屬性配置方式詳解

    幾種SpringBoot的屬性配置方式詳解

    通常項(xiàng)目配置信息都寫(xiě)在.properties或者.yml文件中,但是打成jar包部署后,如果需要修改配置信息,還需要改完再重新打包部署,因此,下面介紹幾種SpringBoot的屬性配置方式,需要的朋友可以參考下
    2024-12-12
  • 關(guān)于TreeMap自定義排序規(guī)則的兩種方式

    關(guān)于TreeMap自定義排序規(guī)則的兩種方式

    這篇文章主要介紹了關(guān)于TreeMap自定義排序規(guī)則的兩種方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Java 如何從spring容器中獲取注入的bean對(duì)象

    Java 如何從spring容器中獲取注入的bean對(duì)象

    這篇文章主要介紹了Java 如何從spring容器中獲取注入的bean對(duì)象,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-11-11
  • java的finalize方法解讀

    java的finalize方法解讀

    這篇文章主要介紹了java的finalize方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java?CAS與JUC組件詳解

    Java?CAS與JUC組件詳解

    CAS是一種基于樂(lè)觀鎖的無(wú)鎖并發(fā)控制技術(shù),其核心邏輯可以概括為:“我認(rèn)為當(dāng)前值應(yīng)該是A,如果是,則更新為B;否則放棄或重試”,整個(gè)過(guò)程由硬件保證原子性,無(wú)需傳統(tǒng)鎖機(jī)制,本文給大家介紹Java?CAS與JUC組件的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2025-04-04

最新評(píng)論

周至县| 佳木斯市| 彭州市| 井研县| 西盟| 离岛区| 保亭| 望谟县| 肥东县| 绵阳市| 筠连县| 德安县| 沾益县| 汉中市| 教育| 德惠市| 长春市| 长兴县| 红安县| 宿松县| 邮箱| 乌苏市| 冕宁县| 宁津县| 辽宁省| 宾川县| 如东县| 邹城市| 濮阳市| 开远市| 松原市| 曲沃县| 长沙市| 溆浦县| 当阳市| 阿坝县| 将乐县| 广宗县| 内丘县| 两当县| 安龙县|