【Java面試】簡述一下你對線程池的理解?

来源:https://www.cnblogs.com/mic112/archive/2022/05/24/16306067.html
-Advertisement-
Play Games

到底是什麼面試題, 讓一個工作了4年的精神小伙,只是去參加了一場技術面試, 就被搞得精神萎靡。鬱郁寡歡! 這一切的背後到底是道德的淪喪,還是人性的扭曲。 讓我們一起揭秘一下這道面試題。 關於, “簡述你對線程池的理解”,看看普通人和高手的回答。 普通人: 嗯。。。。。。。。。。 高手: 關於這個問題 ...


到底是什麼面試題,

讓一個工作了4年的精神小伙,只是去參加了一場技術面試,

就被搞得精神萎靡。鬱郁寡歡!

這一切的背後到底是道德的淪喪,還是人性的扭曲。

讓我們一起揭秘一下這道面試題。

關於, “簡述你對線程池的理解”,看看普通人和高手的回答。

普通人:

嗯。。。。。。。。。。

高手:

關於這個問題,我會從幾個方面來回答。

首先,線程池本質上是一種池化技術,而池化技術是一種資源復用的思想,比較常見的有連接池、記憶體池、對象池。

而線程池裡面復用的是線程資源,它的核心設計目標,我認為有兩個:

  1. 減少線程的頻繁創建和銷毀帶來的性能開銷,因為線程創建會涉及到CPU上下文切換、記憶體分配等工作。

  2. 線程池本身會有參數來控制線程創建的數量,這樣就可以避免無休止的創建線程帶來的資源利用率過高的問題,

    起到了資源保護的作用。

其次,我簡單說一下線程池裡面的線程復用技術。因為線程本身並不是一個受控的技術,也就是說線程的生命周期時由任務運行的狀態決定的,無法人為控制。

所以為了實現線程的復用,線程池裡面用到了阻塞隊列,簡單來說就是線程池裡面的工作線程處於一直運行狀態,它會從阻塞隊列中去獲取待執行的任務,一旦隊列空了,那這個工作線程就會被阻塞,直到下次有新的任務進來。

也就是說,工作線程是根據任務的情況實現阻塞和喚醒,從而達到線程復用的目的。

最後,線程池裡面的資源限制,是通過幾個關鍵參數來控制的,分別是核心線程數、最大線程數。

核心線程數表示預設長期存在的工作線程,而最大線程數是根據任務的情況動態創建的線程,主要是提高阻塞隊列中任務的

處理效率。image-20220422153602866

以上就是我對這個問題的理解!

總結

我當時在閱讀線程池的源碼的時候,被裡面的各種設計思想驚艷到了。

比如動態擴容和縮容的思想、線程的復用思想、以及線程回收的方法等等。

我發現越是簡單的東西,反而越不簡單。

更多的面試資料和麵試技巧,可以私信我獲取。

file

版權聲明:本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Mic帶你學架構
如果本篇文章對您有幫助,還請幫忙點個關註和贊,您的堅持是我不斷創作的動力。歡迎關註「跟著Mic學架構」公眾號公眾號獲取更多技術乾貨!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Spring IOC Bean對象的創建總結 根據前面的介紹,可以進行Spring IOC容器創建Bean的總結: 調用構造函數啟動,調用過程中父類會忽略調用三個Aware介面,BeanNameAware,BeanClassloaderAware,BeanFactoryAware。 環境準備,Env ...
  • 昨天給大家介紹了Java 16中的Stream增強,可以直接通過toList()來轉換成List。 主要涉及下麵這幾種轉換方式: list.stream().toList(); list.stream().collect(Collectors.toList()); list.stream().col ...
  • 第1章 課程介紹 試看2 節 | 10分鐘 包括課程概述、核心模塊、核心技術、課程安排、課程收穫、講授方式、學習前提等方面的介紹,讓同學們對課程項目有一個直觀的瞭解。 收起列表 視頻:1-1 課程導讀 (07:01)試看 視頻:1-2 課程適用於最新版node.js (02:08) 第2章 node ...
  • 第1章 課程導學與準備工作 試看4 節 | 33分鐘 本章節對課程的內容做介紹說明,以及本門課程能為學員帶來那些收穫。大家認真學習成為職業程式員。 收起列表 視頻:1-1 C++氣象項目數據中心實戰導學 (10:30)試看 視頻:1-2 項目介紹 (13:12)試看 視頻:1-3 開發環境 (01: ...
  • 第1章 課程介紹(磨刀不費砍柴工) 試看4 節 | 48分鐘 瞭解項目案例業務需求,觀看完整的項目演示。掌握學習本課程的方法,獲取課程授權碼,以及如何利用線上教程學習和答疑。 收起列表 視頻:1-1 課程導學 (17:37)試看 視頻:1-2 搭建開發環境 (18:11) 視頻:1-3 本課程學習方 ...
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
  • 0、前言 本篇博客的初衷是為了特定的人弄的,這些內容在網上都可以找到原文,因此:這篇博客只是保證能夠讓特定的人看懂,其他人看得懂就看,看不懂拉倒,同時,這篇博客中細節說明沒有、運行截圖沒有、特別備註沒有...... 1、JUL 指的是Java Util Logging包,它是java原生的日誌框架, ...
  • 在kubernetes容器環境下 kafka會預設把主機名註冊到zookeeper。這個時候消費端部署在不同的命名空間或者不同的集群中會出現無法訪問的情況。用advertised.listeners配置可以重寫預設註冊的地址。 定義 listeners listeners 配置的是kafka Ser ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...