摘要:通過(guò)方法提交一個(gè)任務(wù),并且通過(guò)對(duì)象來(lái)獲得結(jié)果。對(duì)象可以取消運(yùn)行任務(wù),設(shè)置等待時(shí)間,獲取任務(wù)狀態(tài),最終獲得任務(wù)結(jié)果。類似于,但是并不會(huì)有返回結(jié)果和異常信息。由兩個(gè)階段所觸發(fā)的,沒(méi)有保證的結(jié)果用于依賴階段的計(jì)算。
本系列關(guān)于concurrent的代碼示例,是被我分割成了小部分,在系列文章結(jié)束以后,我會(huì)將較為完整的代碼上傳,在寫的過(guò)程中我會(huì)參考官方API以及其他牛人的見解,大家有不同的看法可以在下面回復(fù)。
這一篇我們繼續(xù)講concurrent包下面的接口,本篇講Callable、 AsynchronousCompletionTask、CompletionService、CompletionService;其實(shí)這四個(gè)接口內(nèi)容不算多就是概念型的,當(dāng)然他們并不是用不到的。
1. Callable實(shí)現(xiàn)Callable接口的類其實(shí)就是一個(gè)可以返回結(jié)果的任務(wù),并且可以拋出異常。 通過(guò)ExecutorService.submit 方法提交一個(gè)callable任務(wù),并且通過(guò)Future對(duì)象來(lái)獲得結(jié)果。 Future對(duì)象可以取消運(yùn)行任務(wù),設(shè)置等待時(shí)間,獲取任務(wù)狀態(tài),最終獲得任務(wù)結(jié)果。Callable類似于 Runnable,但是runnable并不會(huì)有返回結(jié)果和異常信息。這一點(diǎn)我們需要區(qū)別開。
2. AsynchronousCompletionTask一個(gè)標(biāo)記接口識(shí)別異步任務(wù)的異步方法。他可以提供監(jiān)控,調(diào)試和跟蹤異步活動(dòng)。
3. CompletionServiceExecutorService的擴(kuò)展,可以獲得線程執(zhí)行結(jié)果。
代碼示例:
import java.util.concurrent.Callable; import java.util.concurrent.CompletionService; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorCompletionService; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class TestCompletionService { public static void main(String[] args) throws InterruptedException, ExecutionException { ExecutorService exec = Executors.newFixedThreadPool(10); CompletionService serv = new ExecutorCompletionService(exec); for (int index = 0; index < 5; index++) { final int NO = index; Callable downImg = new Callable() { public String call() throws Exception { Thread.sleep((long) (Math.random() * 10000)); return "Downloaded Image " + NO; } }; serv.submit(downImg); } Thread.sleep(1000 * 2); System.out.println("Show web content"); for (int index = 0; index < 5; index++) { Future task = serv.take(); String img = (String)task.get(); System.out.println(img); } System.out.println("End"); // 關(guān)閉線程池 exec.shutdown(); } }4. CompletionStage
異步計(jì)算中可能出現(xiàn)的一個(gè)階段,也就是說(shuō)當(dāng)一個(gè)CompletionStage 完成時(shí)執(zhí)行的動(dòng)作或計(jì)算。
其實(shí)拆開來(lái)看就是,一個(gè)階段的執(zhí)行可能會(huì)觸發(fā)完成一個(gè)單一的階段,或兩個(gè)階段,或多個(gè)階段。在一個(gè)階段的依賴關(guān)系被安排使用的方法與前綴。由兩個(gè)階段完成所觸發(fā)的,可以結(jié)合他們的結(jié)果或效果,使用相應(yīng)命名的方法。由兩個(gè)階段所觸發(fā)的,沒(méi)有保證的結(jié)果用于依賴階段的計(jì)算。這個(gè)類呢可以說(shuō)讓人很難取舍到底什么時(shí)候用,什么時(shí)候需要做幾個(gè)階段的處理計(jì)算。這個(gè)其實(shí)根據(jù)大家的業(yè)務(wù)考慮使用與否,畢竟他只是一個(gè)工具,即使有相同業(yè)務(wù)也可以使用別的方式實(shí)現(xiàn)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/65028.html
摘要:針對(duì)高質(zhì)量多線程并發(fā)程序設(shè)計(jì)時(shí)為防死崩等現(xiàn)象的出現(xiàn),比如使用之前的和等,每每需要考慮性能死鎖公平性資源管理以及如何避免線程安全性方面帶來(lái)的危害等諸多因素,往往會(huì)采用一些較為復(fù)雜的安全策略,加重了程序員的開發(fā)負(fù)擔(dān)。 大家好,最近由于公司的事情不是很多,準(zhǔn)備開篇寫一寫concurrent這一塊,因?yàn)樽罱枚嗝嬖囌邔?duì)這個(gè)都不是很了解,有的是知其然不知其所以然,我寫這篇(系列)文章的初衷是為了...
摘要:并發(fā)和并行并發(fā)和并行是兩個(gè)非常容易被混淆的概念。并發(fā)說(shuō)的是在一個(gè)時(shí)間段內(nèi),多件事情在這個(gè)時(shí)間段內(nèi)交替執(zhí)行。并行說(shuō)的是多件事情在同一個(gè)時(shí)刻同事發(fā)生。由于線程池是一個(gè)線程,得不到執(zhí)行,而被餓死,最終導(dǎo)致了程序死鎖的現(xiàn)象。 同步(Synchronous)和異步(Asynchronous) 同步和異步通常來(lái)形容一次方法調(diào)用,同步方法調(diào)用一旦開始,調(diào)用者必須等到方法調(diào)用返回后,才能繼續(xù)后續(xù)的行為...
摘要:所有示例代碼請(qǐng)見下載于基本概念并發(fā)同時(shí)擁有兩個(gè)或者多個(gè)線程,如果程序在單核處理器上運(yùn)行多個(gè)線程將交替地?fù)Q入或者換出內(nèi)存這些線程是同時(shí)存在的,每個(gè)線程都處于執(zhí)行過(guò)程中的某個(gè)狀態(tài),如果運(yùn)行在多核處理器上此時(shí),程序中的每個(gè)線程都 所有示例代碼,請(qǐng)見/下載于 https://github.com/Wasabi1234... showImg(https://upload-images.jians...
摘要:有三種狀態(tài)運(yùn)行關(guān)閉終止。類類,提供了一系列工廠方法用于創(chuàng)建線程池,返回的線程池都實(shí)現(xiàn)了接口。線程池的大小一旦達(dá)到最大值就會(huì)保持不變,在提交新任務(wù),任務(wù)將會(huì)進(jìn)入等待隊(duì)列中等待。此線程池支持定時(shí)以及周期性執(zhí)行任務(wù)的需求。 這是java高并發(fā)系列第19篇文章。 本文主要內(nèi)容 介紹Executor框架相關(guān)內(nèi)容 介紹Executor 介紹ExecutorService 介紹線程池ThreadP...
摘要:表示的是兩個(gè),當(dāng)其中任意一個(gè)計(jì)算完并發(fā)編程之是線程安全并且高效的,在并發(fā)編程中經(jīng)常可見它的使用,在開始分析它的高并發(fā)實(shí)現(xiàn)機(jī)制前,先講講廢話,看看它是如何被引入的。電商秒殺和搶購(gòu),是兩個(gè)比較典型的互聯(lián)網(wǎng)高并發(fā)場(chǎng)景。 干貨:深度剖析分布式搜索引擎設(shè)計(jì) 分布式,高可用,和機(jī)器學(xué)習(xí)一樣,最近幾年被提及得最多的名詞,聽名字多牛逼,來(lái),我們一步一步來(lái)?yè)羝魄皟蓚€(gè)名詞,今天我們首先來(lái)說(shuō)說(shuō)分布式。 探究...
閱讀 681·2021-11-15 11:37
閱讀 4143·2021-09-09 09:34
閱讀 3575·2019-08-30 15:52
閱讀 2615·2019-08-29 14:03
閱讀 2858·2019-08-26 13:36
閱讀 1599·2019-08-26 12:16
閱讀 1603·2019-08-26 11:45
閱讀 3497·2019-08-23 18:41