欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ExecutorService實(shí)現(xiàn)獲取線程返回值

 更新時(shí)間:2022年08月11日 10:39:58   作者:Maggnno  
這篇文章主要介紹了ExecutorService實(shí)現(xiàn)獲取線程返回值,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

什么是ExecutorService?

ExecutorService是java.util.concurrent包中的一個(gè)線程池實(shí)現(xiàn)接口。其有兩個(gè)實(shí)現(xiàn)類:ThreadPoolExecutor 和 ScheduledThreadPoolExecutor。分別用來(lái)實(shí)現(xiàn)普通線程池和延遲任務(wù)線程池。普通線程池通過(guò)配置線程池大小,能有效管理線程的調(diào)度,在執(zhí)行大量異步線程時(shí)提高程序的性能。延遲任務(wù)線程池可控制在給定多長(zhǎng)的延遲后執(zhí)行線程。想要實(shí)現(xiàn)獲取線程的返回值,可以通過(guò)ThreadPoolExecutor及其子類管理線程。

實(shí)現(xiàn)帶返回值的Callable子類

創(chuàng)建一個(gè)線程類實(shí)現(xiàn)Callable接口,重寫call方法,其中call方法相當(dāng)于Thread子類中的run方法。其內(nèi)容為線程運(yùn)行時(shí)所執(zhí)行的業(yè)務(wù)。

ThreadWithCallable.java

package thread;

import java.util.concurrent.Callable;

/**
?* ?一個(gè)包含返回值的線程類
?* @author xiezd 2018-01-14 21:40
?*
?*/
public class ThreadWithCallback implements Callable{
? ? private int number;
? ? public ThreadWithCallback(int number){
? ? ? ? this.number = number;
? ? }
? ? //相當(dāng)于Thread的run方法
? ? @Override
? ? public Object call() throws Exception {
? ? ? ? long begin = System.currentTimeMillis();
? ? ? ? int index = (int)(Math.random() * 99999999);
? ? ? ? int result = number;
? ? ? ? //隨便寫的
? ? ? ? for (int i = 1; i < index; i++) {
? ? ? ? ? ? result = (result / i ) * index;
? ? ? ? }
? ? ? ? long end = System.currentTimeMillis();
? ? ? ? return "計(jì)算數(shù)值為" + number + "的線程,花費(fèi):" + (end - begin) + "毫秒。";
? ? }
}

創(chuàng)建線程池測(cè)試

編寫一個(gè)測(cè)試類:

1.通過(guò)Excutors工廠類獲取一個(gè)固定大小的線程池對(duì)象。
2.調(diào)用線程池對(duì)象的submit方法,參數(shù)為一個(gè)線程對(duì)象,返回值為Future對(duì)象。
3.調(diào)用Future對(duì)象的get方法獲取線程返回值。
4.關(guān)閉線程池。

App.java

package thread;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

/**
?* @author xiezd 2018-01-14 21:49
?*/
public class App {
? ? public static void main(String[] args) {
? ? ? ? ExecutorService executors = Executors.newFixedThreadPool(10);
? ? ? ? try {
? ? ? ? ? ? /* 啟動(dòng)線程時(shí)會(huì)返回一個(gè)Future對(duì)象。
? ? ? ? ? ? ?* 可以通過(guò)future對(duì)象獲取現(xiàn)成的返回值。
? ? ? ? ? ? ?* 在執(zhí)行future.get()時(shí),主線程會(huì)堵塞,直至當(dāng)前future線程返回結(jié)果。
? ? ? ? ? ? ?*/
? ? ? ? ? ? Future future1 = executors.submit(new ThreadWithCallback(20));
? ? ? ? ? ? Future future2 = executors.submit(new ThreadWithCallback(30));
? ? ? ? ? ? System.out.println(future1.get());
? ? ? ? ? ? System.out.println(future2.get());

? ? ? ? } catch (InterruptedException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? } catch (ExecutionException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }finally {
? ? ? ? ? ? executors.shutdown();
? ? ? ? }
? ? }
}

注:在future調(diào)用get方法時(shí),主線程會(huì)阻塞(sè),直到該線程執(zhí)行完畢返回對(duì)象了只有才繼續(xù)運(yùn)行。

如果要執(zhí)行n個(gè)線程,可以把future放入Set集合中,在所有線程都啟動(dòng)完畢后,遍歷Set取出返回值。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java?properties?和?yml?的區(qū)別解析

    Java?properties?和?yml?的區(qū)別解析

    properties和yml都是Spring?Boot支持的兩種配置文件,它們可以看做Spring?Boot在不同時(shí)期的兩種“產(chǎn)品”,這篇文章主要介紹了Java?properties?和?yml?的區(qū)別,需要的朋友可以參考下
    2023-02-02
  • SpringBoot整合FTP實(shí)現(xiàn)文件傳輸?shù)牟襟E

    SpringBoot整合FTP實(shí)現(xiàn)文件傳輸?shù)牟襟E

    這篇文章主要給大家介紹了SpringBoot整合FTP實(shí)現(xiàn)文件傳輸?shù)牟襟E,文中的流程步驟和代碼示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-11-11
  • Java實(shí)現(xiàn)簡(jiǎn)單文件過(guò)濾器功能

    Java實(shí)現(xiàn)簡(jiǎn)單文件過(guò)濾器功能

    下面小編就為大家分享一篇Java實(shí)現(xiàn)簡(jiǎn)單文件過(guò)濾器功能,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • Springboot微服務(wù)打包Docker鏡像流程解析

    Springboot微服務(wù)打包Docker鏡像流程解析

    這篇文章主要介紹了Springboot微服務(wù)打包Docker鏡像流程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java JVM內(nèi)存區(qū)域詳解

    Java JVM內(nèi)存區(qū)域詳解

    下面小編就為大家?guī)?lái)一篇基于jvm java內(nèi)存區(qū)域的介紹。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-11-11
  • java 中模式匹配算法-KMP算法實(shí)例詳解

    java 中模式匹配算法-KMP算法實(shí)例詳解

    這篇文章主要介紹了java 中模式匹配算法-KMP算法實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Comet框架Plushlet使用問(wèn)題解決方案

    Comet框架Plushlet使用問(wèn)題解決方案

    這篇文章主要介紹了Comet框架Plushlet使用問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 如何更優(yōu)雅地獲取spring boot yml中的值

    如何更優(yōu)雅地獲取spring boot yml中的值

    這篇文章主要給大家介紹了關(guān)于如何更優(yōu)雅地獲取spring boot yml中值的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用spring boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 關(guān)于Spring?Cloud的熔斷器監(jiān)控問(wèn)題

    關(guān)于Spring?Cloud的熔斷器監(jiān)控問(wèn)題

    Turbine是一個(gè)聚合Hystrix監(jiān)控?cái)?shù)據(jù)的工具,它可將所有相關(guān)/hystrix.stream端點(diǎn)的數(shù)據(jù)聚合到一個(gè)組合的/turbine.stream中,從而讓集群的監(jiān)控更加方便,接下來(lái)通過(guò)本文給大家介紹Spring?Cloud的熔斷器監(jiān)控,感興趣的朋友一起看看吧
    2022-01-01
  • springboot如何實(shí)現(xiàn)導(dǎo)入其他配置類

    springboot如何實(shí)現(xiàn)導(dǎo)入其他配置類

    這篇文章主要介紹了springboot如何實(shí)現(xiàn)導(dǎo)入其他配置類問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評(píng)論