跳槽面試必備 深入理解 Java 多執行緒核心知識

2021-08-19 23:59:51 字數 1717 閱讀 5344

概念梳理

併發與並行

臨界區阻塞與非阻塞

死鎖活鎖

飢餓線程的生命週期

建立狀態

可執行狀態

不可執行狀態

執行緒呼叫 wait() 方法等待特定條件的滿足;

執行緒輸入/輸出阻塞;

返回可執行狀態;

處於睡眠狀態的執行緒在指定的時間過去後;

如果執行緒在等待某一條件,另乙個物件必須通過 notify() 或 notifyall() 方法通知等待執行緒條件的改變;

如果執行緒是因為輸入輸出阻塞,等待輸入輸出完成。

執行緒的優先順序

執行緒優先順序及設定

執行緒建立後,可通過呼叫 setpriority() 方法改變優先順序;

執行緒的優先順序是1-10之間的正整數。

執行緒的排程策略

執行緒體中呼叫了 sleep() 方法,使執行緒進入睡眠狀態;

執行緒由於 i/o 操作而受阻塞;

另乙個更高優先順序的執行緒出現;

在支援時間片的系統中,該執行緒的時間片用完。

單執行緒建立方式

開啟新的執行緒,不影響主線程的**執行順序也不會阻塞主線程的執行;

新的執行緒和主線程的**執行順序是不能夠保證先後的;

對於多執行緒程式,從微觀上來講某一時刻只有乙個執行緒在工作,多執行緒目的是讓 cpu 忙起來;

通過檢視 thread 的原始碼可以看到,thread 類是實現了 runnable 介面的,所以這兩種本質上來講是乙個;

為什麼要用執行緒池

如果有任務來了,再去建立執行緒的話效率比較低,如果從乙個池子中可以直接獲取可用的執行緒,那效率會有所提高。所以執行緒池省去了任務過來,要先建立執行緒再去執行的過程,節省了時間,提公升了效率;

執行緒池可以管理和控制線程,因為執行緒是稀缺資源,如果無限制的建立,不僅會消耗系統資源,還會降低系統的穩定性,使用執行緒池可以進行統一的分配,調優和監控;

執行緒池提供佇列,存放緩衝等待執行的任務。

threadpoolexecutor

public

threadpoolexecutor

(int corepoolsize,                          int maximumpoolsize,                          long keepalivetime,

timeunit unit,

blockingqueueworkqueue)

;

核心池的大小。

threadpoolexecutor.discardpolicy:也是丟棄任務,但是不丟擲異常;

threadpoolexecutor.discardoldestpolicy:丟棄佇列最前面的任務,然後重新嘗試執行任務(重複此過程);

threadpoolexecutor.callerrunspolicy:由呼叫執行緒處理該任務。

在 corepool 滿了之後,執行緒被提交到任務佇列,等待執行緒池空閒;

在任務佇列滿了之後 corepool 還沒有空閒,那麼任務將被提交到 maxpool 中,如果 maxpool 滿了之後執行 task 拒絕策略。

executors

newsinglethreadexecutor

newfixedthreadpool

newcachedthreadpool

newscheduledthreadpool

推薦使用 threadpoolexecutor 方式

JAVA 深入理解 IO

定義 如果乙個類是用來完成程式和裝置之間的資料傳輸,則這個類有乙個特殊的稱謂叫 流 流和類的關係 流一定是類,但是類不一定是流。分類 輸入流 輸出流 位元組流 字元流 原始流 包裹流 常用流 的介紹 四大基本抽象流 inputstream outputsream reader writer 位元組流...

深入理解Java多型機制

目錄 1,多型的概念?2,存在的條件?3,案列解析?4,應用場景?1,多型的概念 父類引用指向子類物件,通俗點就是,在編譯時不繫結是什麼方法,根據你傳進來的值,是什麼就會執行什麼。2.存在條件 第一,要有繼承 第二,要有方法的重寫 第三,父類引用指向子類物件 3,案列解析 好好體會以下這個案例,通過...

java多型深入理解 一

很多人都知道物件導向的三大特性 繼承 封裝 多型,可是真正理解好這三特性並不是一件簡單的事.本週我打算對多型進行研究並寫下我的小例子 樂器類 class musicinstruments public void instruments musicinstruments instruments 笛子類...