最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

【Java面試系列】JUC-01 線程入門&如何創(chuàng)建線程

2023-07-12 22:28 作者:程序員一棵樹  | 我要投稿


文本主要講3個問題:

  1. 線程是什么?

  2. 線程有哪些狀態(tài)?各狀態(tài)間的轉換了解嗎?

  3. 創(chuàng)建線程的3種方法你都了解嗎?

備注:如果不方便看文章,可以直接去看我的視頻,抖音搜索【程序員一棵樹】。

1. 線程是什么?

要介紹線程,我們首先需要知道什么是進程。

進程:進程是一個具有一定獨立功能的程序在一個數據集合上依次動態(tài)執(zhí)行的過程。是一個正在執(zhí)行的程序的實例,包括程序計數器、寄存器和程序變量的當前值等。

在介紹完進程以后,我們再來看一下更細粒度的線程。

線程:線程是進程中執(zhí)行運算的最小單位,是進程中的一個實體,是被系統(tǒng)獨立調度和分派的基本單位,線程自己不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源,但它可與同屬一個進程的其它線程共享進程所擁有的全部資源。一個線程可以創(chuàng)建和撤銷另一個線程,同一進程中的多個線程之間可以并發(fā)執(zhí)行。

下圖直觀展示了一下線程和進程的關系。


2. 線程各狀態(tài)間的轉換你了解嗎?

首先,我們需要知道線程都有哪些狀態(tài)。

線程有如下6個狀態(tài):1. 初始、2. 等待、3. 超時等待、4.運行(運行中、就緒)、5. 終止、6. 阻塞。(有時候會把運行中和就緒單獨拿出來,此時就會有7種狀態(tài))

下面,我們通過一張圖來展示各狀態(tài)間的轉換。

? 狀態(tài)流轉圖

這里我們選幾個比較常見的動作簡要說明一下,

Sleep: 是簡單的線程睡眠。 public static native void sleep(long millis) throws InterruptedException;

Yiled:CPU上先離開,先讓出一下,返回就緒狀態(tài)。進入等待隊列再等調度進行調用,不管后面其他線程能不能搶到;

Join:其他線程加入進來,等加進來的運行完再運行(sleep再久也沒用),一般用來按順序

wait() 和 notify()是Object類的,等待,通知。

3. 創(chuàng)建建線程的3種方法你都了解嗎?

  1. 繼承Thread類。

  2. 實現(xiàn)Runnable

  3. 使用Callable和FutureTask創(chuàng)建線程。

  4. 創(chuàng)建線程池 ThreadPoolExecutor。


main函數


執(zhí)行結果:



對于線程池,我們這里簡單介紹下ThreadPoolExecutor及其參數,因為它是Executors創(chuàng)建線程池的底層實現(xiàn)。(注意:ThreadPoolExecutor我們會在后續(xù)文章會對這塊有詳細展開,本文既然提到了就簡單講一下入參)

下圖是ThreadPoolExecutor原始構造函數的JDK源碼截圖,這也是面試中最常會被問到,同時也是我們日常開發(fā)需要掌握的一個構造函數。下面我們對它的7個構造函數進行簡要的介紹。


  • corePoolSize – the number of threads to keep in the pool, even if they are idle, unless allowCoreThreadTimeOut is set (核心線程數。一直存在的,可供線程池使用的線程數量,可以理解為不會下線的常用工)

  • maximumPoolSize – the maximum number of threads to allow in the pool (最大線程數。線程池中線程數的上限。)

  • keepAliveTime – when the number of threads is greater than the core, this is the maximum time that excess idle threads will wait for new tasks before terminating. (非核心線程外的線程最大空閑時間??臻e時間超過該時間則線程銷毀)

  • unit – the time unit for the keepAliveTime argument (最大空閑等待時間的時間單位

  • workQueue – the queue to use for holding tasks before they are executed. This queue will hold only the Runnable tasks submitted by the execute method. (阻塞隊列。用于存放暫時無法被執(zhí)行的任務)

  • threadFactory – the factory to use when the executor creates a new thread (線程工廠。線程池的線程都由該工廠創(chuàng)建)

  • handler – the handler to use when execution is blocked because the thread bounds and queue capacities are reached(任務拒絕處理器。用于處理阻塞隊列滿時,無法加入到阻塞隊列中的任務)

好了,本期的文章就到這里。更多更精彩的內容請關注。

? ? ? ? V信公眾號搜索? ?“程序員一棵樹”。 內有相關文檔原文和免費資料。

? ? ? ? D音搜索? ? ? ? ? ? ?“程序員一棵樹”。

? ? ? ? B站搜索? ? ? ? ? ? ?“程序員一棵樹”。


【Java面試系列】JUC-01 線程入門&如何創(chuàng)建線程的評論 (共 條)

分享到微博請遵守國家法律
永吉县| 大同市| 平利县| 临湘市| 嘉峪关市| 南丰县| 金秀| 望奎县| 蕲春县| 伊宁县| 广灵县| 新和县| 金寨县| 磐石市| 陵水| 和田市| 西充县| 丹巴县| 灵丘县| 特克斯县| 洛扎县| 淮北市| 尉氏县| 南丹县| 咸丰县| 宕昌县| 邵武市| 博乐市| 耒阳市| 南江县| 黄石市| 阿勒泰市| 龙川县| 靖边县| 舞钢市| 西吉县| 寻甸| 泰和县| 乌兰县| 治多县| 商丘市|