本文實(shí)例講述了Java8并行流中自定義線程池操作。分享給大家供大家參考,具體如下:
創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、婺城網(wǎng)絡(luò)推廣、成都微信小程序、婺城網(wǎng)絡(luò)營(yíng)銷、婺城企業(yè)策劃、婺城品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供婺城建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com
1.概覽
java8引入了流的概念,流是作為一種對(duì)數(shù)據(jù)執(zhí)行大量操作的有效方式。并行流可以被包含于支持并發(fā)的環(huán)境中。這些流可以提高執(zhí)行性能-以犧牲多線程的開銷為代價(jià)
在這篇短文中,我們將看一下 Stream API的最大限制,同時(shí)看一下如何讓并行流和線程池實(shí)例(ThreadPool instance)一起工作。
2.并行流Parallel Stream
我們先以一個(gè)簡(jiǎn)單的例子來(lái)開始-在任一個(gè)Collection類型上調(diào)用parallelStream
方法-它將返回一個(gè)可能的并行流。
@Test publicvoidgivenList_whenCallingParallelStream_shouldBeParallelStream(){ List aList = newArrayList<>(); Stream parallelStream = aList.parallelStream(); assertTrue(parallelStream.isParallel()); }
這樣的流的默認(rèn)處理流程是使用ForkJoinPool.commonPool()
,這是一個(gè)被整個(gè)應(yīng)用程序所共享的線程池。
3.自定義線程池
在處理流的時(shí)候,我們可以傳遞自定義一個(gè)線程池。下面的例子中,我們有一個(gè)并行流,這個(gè)并行流使用了一個(gè)自定義的線程池去計(jì)算1到 1,000,000的和:
@Testpublic void giveRangeOfLongs_whenSummedInParallel_shouldBeEqualToExpectedTotal() throws InterruptedException, ExecutionException { long firstNum = 1; long lastNum = 1_000_000; List aList = LongStream.rangeClosed(firstNum, lastNum).boxed() .collect(Collectors.toList()); ForkJoinPool customThreadPool = new ForkJoinPool(4); long actualTotal = customThreadPool.submit( () -> aList.parallelStream().reduce(0L, Long::sum)).get(); assertEquals((lastNum + firstNum) * lastNum / 2, actualTotal); }
我們使用ForkJoinPool的構(gòu)造方法并設(shè)定并行級(jí)別為4去創(chuàng)建一個(gè)線程池。要想確定不同環(huán)境的最優(yōu)值(optimal),我們需要試驗(yàn)一下。一個(gè)好的做法就是,基于你CPU的核數(shù)來(lái)確定并行級(jí)別的數(shù)值。
4.總結(jié)
我們簡(jiǎn)要地看了一下,如何使用一個(gè)自定義的Thread Pool運(yùn)行并行流。只要在正確的環(huán)境中配置了合適的平行級(jí)別,就能在確定的情況下獲得較高的執(zhí)行性能。
更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java進(jìn)程與線程操作技巧總結(jié)》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。