threadpoolexecutor和executors 為什么我就是看不懂java并發(fā)?
為什么我就是看不懂java并發(fā)?Java是一種多線程編程語(yǔ)言,這意味著我們這個(gè)可以建議使用Java開發(fā)多線程程序。多線程程序中有兩個(gè)或多個(gè)這個(gè)可以而不運(yùn)行的部分,每個(gè)部分這個(gè)可以而全面處理不同的任務(wù),
為什么我就是看不懂java并發(fā)?
Java是一種多線程編程語(yǔ)言,這意味著我們這個(gè)可以建議使用Java開發(fā)多線程程序。多線程程序中有兩個(gè)或多個(gè)這個(gè)可以而不運(yùn)行的部分,每個(gè)部分這個(gè)可以而全面處理不同的任務(wù),特別是在計(jì)算機(jī)有多個(gè)CPU時(shí),這個(gè)可以優(yōu)化不使用后用資源。
依據(jù)定義,多任務(wù)就是多個(gè)進(jìn)程網(wǎng)絡(luò)共享公共考試處理資源(如CPU)的時(shí)候。多線程將多任務(wù)的思想擴(kuò)充卡到可以不將單個(gè)應(yīng)用程序中的某一特定操作細(xì)分為單獨(dú)線程的應(yīng)用程序。每個(gè)線程都這個(gè)可以并行運(yùn)行。操作系統(tǒng)不光在完全不同的應(yīng)用程序之間劃作處理時(shí)間,并且在應(yīng)用程序內(nèi)的每個(gè)線程之間劃分問(wèn)題處理時(shí)間
多線程技術(shù)使您能夠以同一程序中多個(gè)活動(dòng)同樣接受的參與寫入。
java并發(fā):
什么是線程池,如何使用,為什么要用?
一、線程池的作用:
線程池作用就是限制下載系統(tǒng)中想執(zhí)行線程的數(shù)量。
依據(jù)系統(tǒng)的環(huán)境情況,也可以不自動(dòng)或不自動(dòng)設(shè)置中線程數(shù)量,提升到運(yùn)行的最佳的方法效果;少了白白浪費(fèi)了系統(tǒng)資源,多了倒致系統(tǒng)擁擠效率不高。用線程池操縱線程數(shù)量,其他線程排隊(duì)等候。一個(gè)任務(wù)執(zhí)行完畢,再?gòu)年?duì)列的中取最前面的任務(wù)又開始執(zhí)行。若隊(duì)列中就沒(méi)在等待進(jìn)程,線程池的這一資源在靜靜的等待。當(dāng)一個(gè)新任務(wù)必須運(yùn)行時(shí),如果線程池中有耐心的等待的工作線程,就也可以結(jié)束不運(yùn)行了;否則進(jìn)入到耐心的等待隊(duì)列。
二、如何導(dǎo)入:
要配置一個(gè)線程池是比較比較復(fù)雜的,尤其是相對(duì)于線程池的原理也不是很知道的情況下,很可能配置的線程池又不是較優(yōu)的,并且在Executors類里面提供給了一些靜態(tài)工廠,生成氣體一些具體用法的線程池。
創(chuàng)建角色一個(gè)單線程的線程池。這個(gè)線程池唯有一個(gè)線程在工作,也就是等同于單線程串行負(fù)責(zé)執(zhí)行所有任務(wù)。要是這個(gè)真正的線程因?yàn)闃O其都結(jié)束了,那么會(huì)有兩個(gè)新的線程來(lái)代替它。此線程池保證所有任務(wù)的執(zhí)行順序通過(guò)任務(wù)的重新提交順序負(fù)責(zé)執(zhí)行。
創(chuàng)建戰(zhàn)隊(duì)且固定大小的線程池。隔一段時(shí)間并提交一個(gè)任務(wù)就創(chuàng)建家族一個(gè)線程,直到線程達(dá)到線程池的最大大小。線程池的大小那樣一來(lái)提升到大的值都會(huì)保持不變,要是某個(gè)線程只不過(guò)負(fù)責(zé)執(zhí)行異常而已經(jīng)結(jié)束,那就線程池會(huì)回答一個(gè)新線程。
創(chuàng)建家族一個(gè)可緩存的線程池。假如線程池的大小將近了處理任務(wù)所要的線程,這樣的話是會(huì)回收部分空閑(60秒不執(zhí)行任務(wù))的線程,當(dāng)任務(wù)數(shù)增加時(shí),此線程池又可以智能的再添加新線程來(lái)去處理任務(wù)。此線程池應(yīng)該不會(huì)對(duì)線程池大小做限制,線程池大小徹底依賴于操作系統(tǒng)(也可以說(shuō)JVM)能夠修改的的最線程大小。修改一個(gè)大小無(wú)盡的的線程池。此線程池支持按時(shí)以及周期性執(zhí)行任務(wù)的需求。
三、為么要用線程池:
1.減少了修改和強(qiáng)制銷毀線程的次數(shù),每個(gè)工作線程都可以不被循環(huán)回收,可想執(zhí)行多個(gè)任務(wù)。2.這個(gè)可以依據(jù)什么系統(tǒng)的承受能力,決定線程池中工作線線程的數(shù)目,防止畢竟消耗過(guò)多的內(nèi)存,而把服務(wù)器累趴下(每個(gè)線程是需要總共1MB內(nèi)存,線程開的到最后,消耗的內(nèi)存也就越大,后來(lái)黑屏)。
Java里面線程池的頂級(jí)接口是Executor,但是嚴(yán)格一點(diǎn)意義上講Executor并不是什么一個(gè)線程池,而僅僅另一個(gè)想執(zhí)行線程的工具。真正的線程池接口是ExecutorService。