這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)在java項目中使用線程池如何實現(xiàn)獲取運(yùn)行線程數(shù)并控制線程啟動速度,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
成都創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設(shè)與策劃設(shè)計,膠州網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:膠州等地區(qū)。膠州做網(wǎng)站價格咨詢:028-86922220
在java里, 我們可以使用Executors.newFixedThreadPool 來創(chuàng)建線程池, 然后就可以不停的創(chuàng)建新任務(wù),并用線程池來執(zhí)行了。
在提交任務(wù)時,如果線程池已經(jīng)被占滿,任務(wù)會進(jìn)到一個隊列里等待執(zhí)行。
這種機(jī)制在一些特定情況下會有些問題。今天我就遇到一種情況:創(chuàng)建線程比線程執(zhí)行的速度要快的多,而且單個線程占用的內(nèi)存又多,所以很快內(nèi)存就爆了。
想了一個辦法,就是在提交任務(wù)之前,先檢查目前正在執(zhí)行的線程數(shù)目,只有沒把線程池占滿的時候在去提交任務(wù)。
代碼很簡單:
int threadCount = ((ThreadPoolExecutor)executor).getActiveCount(); // System.out.println("running : " + threadCount); while (threadCount == POOL_SIZE) { TimeUnit.MILLISECONDS.sleep(1); threadCount = ((ThreadPoolExecutor)executor).getActiveCount(); // System.out.println("running : " + threadCount); } executor.execute
上述就是小編為大家分享的在java項目中使用線程池如何實現(xiàn)獲取運(yùn)行線程數(shù)并控制線程啟動速度了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。