bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

JUC之線程池-創(chuàng)新互聯(lián)

ThreadPoolExecutor 作用
  • 減少了線程創(chuàng)建和銷毀的開銷,當(dāng)執(zhí)行大量異步任務(wù)時(shí)線程池能提供較好的性能。

    創(chuàng)新互聯(lián)專注于企業(yè)網(wǎng)絡(luò)營(yíng)銷推廣、網(wǎng)站重做改版、保亭黎族網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5建站購(gòu)物商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為保亭黎族等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
  • 提供了一種資源限制和管理手段,比如可以限制線程的個(gè)數(shù),動(dòng)態(tài)新增線程等。
    在這里插入圖片描述

  • Executor是一個(gè)接口,它是Executor框架的基礎(chǔ),它將任務(wù)的提交與任務(wù)的執(zhí)行分離開來。

  • ExecutorService接口繼承了Executor,在其上做了一些shutdown()、submit()的擴(kuò)展,可以說是真正的線程池接口;

  • AbstractExecutorService抽象類實(shí)現(xiàn)了ExecutorService接口中的大部分方法;

  • ThreadPoolExecutor是線程池的核心實(shí)現(xiàn)類,用來執(zhí)行被提交的任務(wù)。

  • ScheduledExecutorService接口繼承了ExecutorService接口,提供了帶"周期執(zhí)行"功能ExecutorService;

  • ScheduledThreadPoolExecutor是一個(gè)實(shí)現(xiàn)類,可以在給定的延遲后運(yùn)行命令,或者定期執(zhí)行命令。ScheduledThreadPoolExecutor比Timer更靈活,功能更強(qiáng)大。

狀態(tài)
  • RUNNING:接受新任務(wù)并且處理阻塞隊(duì)列里的任務(wù)。
  • SHUTDOWN:拒絕新任務(wù)但是處理阻塞隊(duì)列里的任務(wù)。
  • STOP:拒絕新任務(wù)并且拋棄阻塞隊(duì)列里的任務(wù),同時(shí)會(huì)中斷正在處理的任務(wù)。
  • TIDYING:所有任務(wù)都執(zhí)行完(包含阻塞隊(duì)列里面的任務(wù))后當(dāng)前線程池活動(dòng)線程數(shù)為0,將要調(diào)用terminated方法。
  • TERMINATED:終止?fàn)顟B(tài)。terminated方法調(diào)用完成以后的狀態(tài)。
線程池狀態(tài)轉(zhuǎn)換

線程池的核心參數(shù)
public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueueworkQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler)
corePoolSize

線程池中的核心線程數(shù),當(dāng)提交一個(gè)任務(wù)時(shí),線程池創(chuàng)建一個(gè)新線程執(zhí)行任務(wù),直到當(dāng)前線程數(shù)等于corePoolSize;
如果當(dāng)前線程數(shù)為corePoolSize,繼續(xù)提交的任務(wù)被保存到阻塞隊(duì)列中,等待被執(zhí)行;
如果執(zhí)行了線程池的prestartAllCoreThreads()方法,線程池會(huì)提前創(chuàng)建并啟動(dòng)所有核心線程。

maximumPoolSize

線程池中允許的大線程數(shù)。如果當(dāng)前阻塞隊(duì)列滿了,且繼續(xù)提交任務(wù),則創(chuàng)建新的線程執(zhí)行任務(wù),前提是當(dāng)前線程數(shù)小于maximumPoolSize

keepAliveTime

線程空閑時(shí)的存活時(shí)間,即當(dāng)線程沒有任務(wù)執(zhí)行時(shí),繼續(xù)存活的時(shí)間。默認(rèn)情況下,該參數(shù)只在線程數(shù)大于corePoolSize時(shí)才有用

TimeUnit

keepAliveTime的時(shí)間單位

workQueue

workQueue必須是BlockingQueue阻塞隊(duì)列。當(dāng)線程池中的線程數(shù)超過它的corePoolSize的時(shí)候,線程會(huì)進(jìn)入阻塞隊(duì)列進(jìn)行阻塞等待。通過workQueue,線程池實(shí)現(xiàn)了阻塞功能。
用于保存等待執(zhí)行的任務(wù)的阻塞隊(duì)列,一般來說,我們應(yīng)該盡量使用有界隊(duì)列,因?yàn)槭褂脽o界隊(duì)列作為工作隊(duì)列會(huì)對(duì)線程池帶來如下影響。
1)當(dāng)線程池中的線程數(shù)達(dá)到corePoolSize后,新任務(wù)將在無界隊(duì)列中等待,因此線程池中的線程數(shù)不會(huì)超過corePoolSize。
2)由于1,使用無界隊(duì)列時(shí)maximumPoolSize將是一個(gè)無效參數(shù)。
3)由于1和2,使用無界隊(duì)列時(shí)keepAliveTime將是一個(gè)無效參數(shù)。
4)更重要的,使用無界queue可能會(huì)耗盡系統(tǒng)資源,有界隊(duì)列則有助于防止資源耗盡,同時(shí)即使使用有界隊(duì)列,也要盡量控制隊(duì)列的大小在一個(gè)合適的范圍。
所以我們一般會(huì)使用,ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue、PriorityBlockingQueue。

threadFactory

創(chuàng)建線程的工廠,通過自定義的線程工廠可以給每個(gè)新建的線程設(shè)置一個(gè)具有識(shí)別度的線程名,當(dāng)然還可以更加自由的對(duì)線程做更多的設(shè)置,比如設(shè)置所有的線程為守護(hù)線程。
參見代碼cn.enjoyedu.ch6. ThreadPoolAdvExecutors靜態(tài)工廠里默認(rèn)的threadFactory,線程的命名規(guī)則是“pool-數(shù)字-thread-數(shù)字”。

RejectedExecutionHandler

線程池的飽和策略,當(dāng)阻塞隊(duì)列滿了,且線程數(shù)達(dá)到maximumPoolSize限制,如果繼續(xù)提交任務(wù),必須采取一種策略處理該任務(wù),線程池提供了4種策略:
(1)AbortPolicy:直接拋出異常,默認(rèn)策略;
(2)CallerRunsPolicy:用調(diào)用者所在的線程來執(zhí)行任務(wù);
(3)DiscardOldestPolicy:丟棄阻塞隊(duì)列中靠最前的任務(wù),并將該任務(wù)添加至隊(duì)列中;
(4)DiscardPolicy:直接丟棄任務(wù);
當(dāng)然也可以根據(jù)應(yīng)用場(chǎng)景實(shí)現(xiàn)RejectedExecutionHandler接口,自定義飽和策略,如記錄日志或持久化存儲(chǔ)不能處理的任務(wù)。

擴(kuò)展線程池(線程池中的aop)

線程池中 beforeExecute和 afterExecute方法。相當(dāng)于執(zhí)行了一個(gè)切面。而在調(diào)用 shutdown 方法后則會(huì)調(diào)用 terminated 方法

提交任務(wù)

execute()方法用于提交不需要返回值的任務(wù),所以無法判斷任務(wù)是否被線程池執(zhí)行成功。
submit()方法用于提交需要返回值的任務(wù)。線程池會(huì)返回一個(gè)future類型的對(duì)象,通過這個(gè)future對(duì)象可以判斷任務(wù)是否執(zhí)行成功,并且可以通過future的get()方法來獲取返回值,get()方法會(huì)阻塞當(dāng)前線程直到任務(wù)完成,而使用get(long timeout,TimeUnit unit)方法則會(huì)阻塞當(dāng)前線程一段時(shí)間后立即返回,這時(shí)候有可能任務(wù)沒有執(zhí)行完

合理地配置線程池

獲取cpu核數(shù) Runtime.getRuntime().availableProcessors();

CPU密集型任務(wù)(數(shù)據(jù)計(jì)算):Ncup+1
IO密集型任務(wù)(讀取磁盤文件,讀取數(shù)據(jù)庫(kù)):2*Ncup
混合型任務(wù):兩者耗時(shí)相差兩到三倍則拆分成兩個(gè)線程池,偏差大的話就按大的處理

ScheduledThreadPoolExecutor

在指定一定延遲時(shí)間后或者定時(shí)進(jìn)行調(diào)度執(zhí)行的線程池

定時(shí)線程池中要進(jìn)行捕捉異常,若不捕捉,程序會(huì)拋出異常不再執(zhí)行并且程序無信息打印
ScheduledThreadPoolExecutor適用于需要多個(gè)后臺(tái)線程執(zhí)行周期任務(wù),同時(shí)為了滿足資源管理的需求而需要限制后臺(tái)線程的數(shù)量的應(yīng)用場(chǎng)景。
線程池隊(duì)列使用DelayedWorkQueue; ScheduledFutureTask是具有返回值的任務(wù),繼承自FutureTask。FutureTask的內(nèi)部有
一個(gè)變量state用來表示任務(wù)的狀態(tài)。
ScheduledFutureTask內(nèi)部還有一個(gè)變量period用來表示任務(wù)的類型,任務(wù)類型如下:

  • period=O,說明當(dāng)前任務(wù)是一次性的,執(zhí)行完畢后就退出了。
  • period為負(fù)數(shù),說明當(dāng)前任務(wù)為fxed-delay任務(wù),是固定延遲的定時(shí)可重復(fù)執(zhí)行任務(wù)。
  • period為正數(shù),說明當(dāng)前任務(wù)為fxed-rate任務(wù),是固定頻率的定時(shí)可重復(fù)執(zhí)行任務(wù)。
常用方法 schedule(Runnable command,long delay,TimeUnit unit)

該方法的作用是提交一個(gè)延遲執(zhí)行的任務(wù),任務(wù)從提交時(shí)間算起延遲單位為unit的delay時(shí)間后開始執(zhí)行。提交的任務(wù)不是周期性任務(wù),任務(wù)只會(huì)執(zhí)行一次。

scheduleWithFixedDelay(Runnable command,long initialDelay,long delay,TimeUnit unit)

該方法的作用是,當(dāng)任務(wù)執(zhí)行完畢后,讓其延遲固定時(shí)間后再次運(yùn)行(fxed-delay任務(wù))。其中initialDelay表示提交任務(wù)后延遲多少時(shí)間開始執(zhí)行任務(wù)command,delay表示當(dāng)任務(wù)執(zhí)行完畢后延長(zhǎng)多少時(shí)間后再次運(yùn)行command任務(wù),unit是initialDelay和delay的時(shí)間單位。任務(wù)會(huì)一直重復(fù)運(yùn)行直到任務(wù)運(yùn)行中拋出了異常,被取消了,或者關(guān)閉了線程池。

scheduleAtFixedRate(Runnable command,long initialDelay,long period,TimeUnit unit)

該方法相對(duì)起始時(shí)間點(diǎn)以固定頻率調(diào)用指定的任務(wù)(fxed-rate任務(wù))。當(dāng)把任務(wù)提交到線程池并延遲initialDelay時(shí)間(時(shí)間單位為unit)后開始執(zhí)行任務(wù)command。然后從initialDelay+period時(shí)間點(diǎn)再次執(zhí)行,而后在initialDelay+2*period時(shí)間點(diǎn)再次執(zhí)行,循環(huán)往復(fù),直到拋出異常或者調(diào)用了任務(wù)的cancel方法取消了任務(wù),或者關(guān)閉了線程池。scheduleAtFixedRate的原理與schedule WithFixedDelay類似,下面我們講下它們之間的不同點(diǎn)。首先調(diào)用scheduleAtFixedRate的代碼如下。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站標(biāo)題:JUC之線程池-創(chuàng)新互聯(lián)
文章路徑:http://vcdvsql.cn/article0/ccshoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)自適應(yīng)網(wǎng)站網(wǎng)站設(shè)計(jì)服務(wù)器托管建站公司網(wǎng)頁(yè)設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)