執行緒池
一般流程:建立執行緒、建立任務、執行任務、關閉執行緒(在一定時間後可自動關閉)
前情提要:如果併發的執行緒數量很多,並且每個執行緒都是執行乙個時間很短的任務就結束了,這樣頻繁建立執行緒就會大大降低系統的效率,因為頻繁建立執行緒和銷毀執行緒需要時間。
需求實現:執行緒池是乙個容納多個執行緒的容器,池中的執行緒可以反覆使用,省去了頻繁建立執行緒物件的操作,節省了大量的時間和資源。
優點:
快取執行緒池
特點:長度無限制
任務加入後的執行流程:
判斷執行緒池是否存在空閒執行緒
存在則使用
不存在,則新建立乙個執行緒並放入執行緒池,然後使用
executorservice service = executors.
newcachedthreadpool()
;service.
execute
(new
runnable()
});service.
execute
(new
runnable()
});
此時使用快取執行緒池建立了兩個執行緒。
定長線程池
特點:長度是制定的數值
任務加入後的執行流程:
判斷執行緒是否存在空閒執行緒
存在則使用
不存在空閒執行緒,且執行緒池未滿的情況下,則建立執行緒並放入執行緒池,然後使用
不存在空閒執行緒,且執行緒池已滿的情況下,則等待執行緒池存在空閒執行緒
executorservice service = executors.
newfixedthreadpool(2
);service.
execute
(new
runnable()
catch
(interruptedexception e)}}
);service.
execute
(new
runnable()
catch
(interruptedexception e)}}
);
此時使用定長線程池建立了兩個執行緒。
單執行緒執行緒池
執行流程:
判斷執行緒池的那個執行緒是否空閒
空閒則使用
不空閒,則等待池中的單個執行緒空閒後使用
executorservice service = executors.
newsinglethreadexecutor()
;service.
execute
(new
runnable()
});service.
execute
(new
runnable()
});
此時使用單執行緒執行緒池執行了兩個執行緒。
週期定長線程池
概述:週期性的執行任務
新建立乙個執行緒池物件:
scheduledexecutorservice service = executors.
newscheduledthreadpool(2
);
主要方法:service.scheduleatfixedrate(引數1,引數2,引數3,引數4)
引數1:需要執行的任務
引數2:延遲執行的時長數字(第一次執行在什麼時間以後)
引數3:週期時長數字(每個多久執行一次)
引數4:時長數字的單位
例如:
service.
scheduleatfixedrate
(new
runnable()
},3,
1,timeunit.seconds)
;
任務描述:列印「鋤禾日當午」,延遲3s後執行,執行週期為1s。 (通用之學習)File類的那些事兒
是檔案和目錄 資料夾 路徑名的抽象表示。建立乙個檔案 假設在d盤下建立乙個.txt字尾的文字檔案,需要用到的方法是createnewfile 返回值為布林型別,如果之前不存在這樣乙個檔案,則新建立乙個檔案並返回true,否則返回false。file file newfile d a.txt syst...
執行緒的那些事兒zz
通過作業系統原理課,我們知道程序是系統資源分配的基本單位,執行緒是程式獨立執行的基本單位。執行緒有時候也被稱作小型程序,首先,這是因為多個執行緒之間是可以共享資源的 其次,多個執行緒之間的切換所花費的代價遠遠比程序低。在使用者態下,使用最廣泛的執行緒操作介面即為posix執行緒介面,即pthread...
執行緒池的那些事
一般我們進行執行緒的操作時,往往要建立乙個新的執行緒,執行完畢後再銷毀,等到有新的執行命令時,又得重新建立執行緒,如此一來顯得十分繁瑣,如果我們將之前執行過的執行緒不銷毀而是放入乙個池子中,當需要執行時直接引用它,這就能省下許多操作的步驟與時間,因此不會由於等待建立執行緒而延遲任務的執行,從而提高了...