日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

玩Java 8 – Lambda和并发

發(fā)布時(shí)間:2023/12/3 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 玩Java 8 – Lambda和并发 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

因此Java 8不久前發(fā)布,具有許多功能和更改。 我們所有的Java狂熱者一直在等待這個(gè)歷史,從他們最初宣布Java 7的所有強(qiáng)大功能開始一直到最終被取消。

我最近才有時(shí)間實(shí)際開始給它一個(gè)真實(shí)的外觀,我將我的家庭項(xiàng)目更新到了8個(gè),我不得不說,我對所獲得的一切通常感到非常滿意。 java.time API的“模仿” JodaTime是一個(gè)很大的改進(jìn),java.util.stream包正在變得有用,lambda將改變我們的編碼樣式,這可能需要一些時(shí)間來適應(yīng)這些變化……引用“強(qiáng)大的力量伴隨著巨大的責(zé)任”這句話是正確的,我認(rèn)為在我們的未來可能會有一些有趣的時(shí)刻,因?yàn)榫帉懸恍╇y以破解的代碼非常容易。 作為調(diào)試示例,我在下面編寫的代碼將很有趣。

文件示例在我的Github博客回購中

此示例的操作很簡單,運(yùn)行幾個(gè)線程,并發(fā)執(zhí)行一些工作,然后等待它們?nèi)客瓿伞?我在玩Java 8的時(shí)候就想通了,讓我全力以赴……
這是我想出的:

package net.briandupreez.blog.java8.futures;import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory;import java.util.Collection; import java.util.List; import java.util.concurrent.*; import java.util.stream.Collectors;/*** Generified future running and completion** @param <T> the result type* @param <S> the task input*/ public class WaitingFuturesRunner<T, S> {private transient static final Log logger = LogFactory.getLog(WaitingFuturesRunner.class);private final Collection<Task<T, S>> tasks;private final long timeOut;private final TimeUnit timeUnit;private final ExecutorService executor;/*** Constructor, used to initialise with the required tasks** @param tasks the list of tasks to execute* @param timeOut max length of time to wait* @param timeUnit time out timeUnit*/public WaitingFuturesRunner(final Collection<Task<T, S>> tasks, final long timeOut, final TimeUnit timeUnit) {this.tasks = tasks;this.timeOut = timeOut;this.timeUnit = timeUnit;this.executor = Executors.newFixedThreadPool(tasks.size());}/*** Go!** @param taskInput The input to the task* @param consolidatedResult a container of all the completed results*/public void go(final S taskInput, final ConsolidatedResult<T> consolidatedResult) {final CountDownLatch latch = new CountDownLatch(tasks.size());final List<CompletableFuture<T>> theFutures = tasks.stream().map(aSearch -> CompletableFuture.supplyAsync(() -> processTask(aSearch, taskInput, latch), executor)).collect(Collectors.<CompletableFuture<T>>toList());final CompletableFuture<List<T>> allDone = collectTasks(theFutures);try {latch.await(timeOut, timeUnit);logger.debug("complete... adding results");allDone.get().forEach(consolidatedResult::addResult);} catch (final InterruptedException | ExecutionException e) {logger.error("Thread Error", e);throw new RuntimeException("Thread Error, could not complete processing", e);}}private <E> CompletableFuture<List<E>> collectTasks(final List<CompletableFuture<E>> futures) {final CompletableFuture<Void> allDoneFuture = CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()]));return allDoneFuture.thenApply(v -> futures.stream().map(CompletableFuture<E>::join).collect(Collectors.<E>toList()));}private T processTask(final Task<T, S> task, final S searchTerm, final CountDownLatch latch) {logger.debug("Starting: " + task);T searchResults = null;try {searchResults = task.process(searchTerm, latch);} catch (final Exception e) {e.printStackTrace();}return searchResults;}}

測試:

package net.briandupreez.blog.java8.futures;import net.briandupreez.blog.java8.futures.example.StringInputTask; import net.briandupreez.blog.java8.futures.example.StringResults; import org.apache.log4j.BasicConfigurator; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test;import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit;/*** Test* Created by brian on 4/26/14.*/ public class CompletableFuturesRunnerTest {@BeforeClasspublic static void init() {BasicConfigurator.configure();}/*** 5tasks at 3000ms concurrently should not be more than 3100* @throws Exception error*/@Test(timeout = 3100)public void testGo() throws Exception {final List<Task<String, String>> taskList = setupTasks();final WaitingFuturesRunner<String, String> completableFuturesRunner = new WaitingFuturesRunner<>(taskList, 4, TimeUnit.SECONDS);final StringResults consolidatedResults = new StringResults();completableFuturesRunner.go("Something To Process", consolidatedResults);Assert.assertEquals(5, consolidatedResults.getResults().size());for (final String s : consolidatedResults.getResults()) {Assert.assertTrue(s.contains("complete"));Assert.assertTrue(s.contains("Something To Process"));}}private List<Task<String, String>> setupTasks() {final List<Task<String, String>> taskList = new ArrayList<>();final StringInputTask stringInputTask = new StringInputTask("Task 1");final StringInputTask stringInputTask2 = new StringInputTask("Task 2");final StringInputTask stringInputTask3 = new StringInputTask("Task 3");final StringInputTask stringInputTask4 = new StringInputTask("Task 4");final StringInputTask stringInputTask5 = new StringInputTask("Task 5");taskList.add(stringInputTask);taskList.add(stringInputTask2);taskList.add(stringInputTask3);taskList.add(stringInputTask4);taskList.add(stringInputTask5);return taskList;} }

輸出:

0 [pool-1-thread-1] Starting: StringInputTask{taskName='Task 1'}0 [pool-1-thread-5] Starting: StringInputTask{taskName='Task 5'}0 [pool-1-thread-2] Starting: StringInputTask{taskName='Task 2'}2 [pool-1-thread-4] Starting: StringInputTask{taskName='Task 4'}2 [pool-1-thread-3] Starting: StringInputTask{taskName='Task 3'}3003 [pool-1-thread-5] Done: Task 53004 [pool-1-thread-3] Done: Task 33003 [pool-1-thread-1] Done: Task 13003 [pool-1-thread-4] Done: Task 43003 [pool-1-thread-2] Done: Task 23007 [Thread-0] WaitingFuturesRunner ?- complete... adding results

在執(zhí)行此操作時(shí),我發(fā)現(xiàn)并閱讀了一些有用的文章/鏈接:

Oracle: Lambda教程

IBM: Java 8并發(fā)

Tomasz Nurkiewicz: CompletableFuture權(quán)威指南

翻譯自: https://www.javacodegeeks.com/2014/04/playing-with-java-8-lambdas-and-concurrency.html

總結(jié)

以上是生活随笔為你收集整理的玩Java 8 – Lambda和并发的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: av体验区| 欧美第二区 | 黄色小说在线看 | 亚洲天堂资源在线 | 瑟瑟综合网 | 亚洲性片 | 国产99免费视频 | 日韩国产小视频 | 绿帽视频 | 在线观看av黄色 | 卡通动漫精品一区二区三区 | 日韩一区二区三区中文字幕 | 日本黄频| 欧美日韩在线视频一区二区三区 | 日本japanese极品少妇 | 国产中出 | 欧美裸体视频 | 911香蕉视频 | 97人妻精品一区二区三区视频 | 国产xxxx做受视频 | 久久亚洲精品无码va白人极品 | 轻轻色在线观看 | 激情专区| 国产小视频在线观看免费 | 成人免费国产 | 污污视频在线观看网站 | 波多野结衣中文字幕在线 | 国产精品白嫩白嫩大学美女 | 欧美va亚洲va | 亚洲久久久久久 | 性色av无码久久一区二区三区 | 国产精品系列在线播放 | www.狠狠 | 色射视频 | 亚洲天堂2018av| 国产欧美一区在线观看 | 在线播放黄色av | 久久久久久影院 | 特级黄色录像 | 婷婷国产精品 | 国产福利视频网站 | 久久中文字幕电影 | 日韩在线一区二区 | av中亚 | 成人第一页 | 国产美女精品一区二区三区 | 一级a毛片免费观看久久精品 | 色黄视频| 17c在线观看 | 国产天堂av在线 | 国产极品999 | 白白色2012年最新视频 | 国产成人av无码精品 | 视频在线观看一区二区 | 国产精品夜夜嗨 | 成人免费无码大片a毛片 | 久久少妇网| 伊人免费视频 | 九九精品视频免费 | 欧美成人精品二区三区99精品 | 亚洲国产精品成人av | 国产九色在线播放九色 | mm视频在线观看 | 黄色调教视频 | 久久天天综合 | 国产精品大片 | 在线观看av网站 | 日本在线www | 久久夫妻视频 | 草草地址线路①屁屁影院成人 | 假日游船| 中文在线字幕免费观 | 最新黄色网页 | 久久亚洲色图 | 亚洲小视频在线播放 | 狠狠一区二区 | 日韩中文字幕网 | 久久久无码18禁高潮喷水 | 日本精品视频在线 | 国产91精品ai换脸 | 亚洲AV无码国产精品午夜字幕 | 国产精品2 | 国产一区二区三区黄 | 免费国产一区 | 高清av在线 | 伊人中文网 | 污视频大全 | 欧美色图视频在线 | 免费一级a毛片夜夜看 | 国产av精国产传媒 | 97影院手机版| 永久免费网站直接看 | 国产成人精品亚洲 | 91免费网站在线观看 | 操人小视频 | 男人av网站 | 处破女av一区二区 | 国产精品麻豆一区二区三区 | 国产肉丝在线 |