五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

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

【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)建線程的評論 (共 條)

分享到微博請遵守國家法律
民丰县| 襄汾县| 阿瓦提县| 牡丹江市| 拉萨市| 淳化县| 大安市| 潮州市| 双辽市| 郎溪县| 威信县| 盐源县| 揭东县| 宜川县| 香格里拉县| 万州区| 竹溪县| 荥阳市| 五常市| 平和县| 鹤壁市| 二连浩特市| 会东县| 饶平县| 法库县| 河北区| 元阳县| 陕西省| 同仁县| 温泉县| 三都| 湖北省| 平湖市| 鞍山市| 昌吉市| 博罗县| 余姚市| 琼结县| 沐川县| 临武县| 闸北区|