概念梳理
併發與並行
臨界區阻塞與非阻塞
死鎖活鎖
飢餓線程的生命週期
建立狀態
可執行狀態
不可執行狀態
執行緒呼叫 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 笛子類...