如何接收线程池执行后的返回值

时间紧迫,先简单记一下

首先定义一个返回值的接受类

package com.lz.car.facade.dto;

import java.io.Serializable;

import com.fasterxml.jackson.annotation.JsonIgnore;

public class MessageDto implements Serializable{

    /**
     * 接口返回内容
     */
    private static final long serialVersionUID = 8475031290992534279L;
    /**
     * 返回码
     */
    private String code;
    /**
     * 返回内容
     */
    private String message;
    /**
     * 报文体
     */
    private Object data;

    public MessageDto(String code, String message) {
        super();
        this.code = code;
        this.message = message;
    }

    public MessageDto() {
        super();
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public Object getData() {
        return data;
    }
    public void setData(Object data) {
        this.data = data;
    }

}

然后我们定义一个Thread类

    public class ThreadTest extends Thread {
        MessageDto messageDto;

        public ThreadTest(MessageDto messageDto) {
            super();
            this.messageDto = messageDto;
        }

        public void run() {
            System.out.println(messageDto.getCode());
            try {
                //随机休眠
                long num = (long) (Math.random() * 10);
                System.out.println(num);
                Thread.sleep(num * 1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            messageDto.setData(System.currentTimeMillis());
        }
    }

然后定义一个测试类执行测试

package com.lz.car.apply.enums;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.ScheduledExecutorService;

/**
 */
public enum ThreadPoolTest {

    public static List<Future> test() {
        ScheduledExecutorService executorService = Executors.newScheduledThreadPool(3);
        MessageDto messageDto1 = new MessageDto();
        MessageDto messageDto2 = new MessageDto();
        MessageDto messageDto3 = new MessageDto();
        List<Future> futureList = new ArrayList<>();

        Future one = executorService.submit(new ThreadTest(messageDto1), messageDto1);
        Future two = executorService.submit(new ThreadTest(messageDto2), messageDto2);
        Future three = executorService.submit(new ThreadTest(messageDto3), messageDto3);
        executorService.shutdown();

        futureList.add(one);
        futureList.add(two);
        futureList.add(three);

        return futureList;
    }

    public static void main(String[] args) throws InterruptedException, ExecutionException {
        List<Future> list = test();
        for(Future future : list) {
            System.out.println(JacksonUtil.toJson(future.get()));
        }

    }
}

运行main方法得到返回:

null
null
null
1
6
1
{"data":1552555559590}
{"data":1552555559590}
{"data":1552555564590}

原文地址:https://www.cnblogs.com/tranquillity/p/10531765.html

时间: 2024-11-09 10:05:22

如何接收线程池执行后的返回值的相关文章

多线程之美4一 线程池执行原理浅析

目录结构 引言 一.线程池工作流程图 二.线程池的运行原理 三.线程池的7个参数 四.常用4个阻塞队列 五.四个拒绝策略语义以及测试用例 六.Executors工具类 6.1. Executors提供的三种线程池 6.2 实际开发中应该怎样设定合适线程池? 七.线程池提交任务的2种 八.总结 引言 ? 我们为什么要使用线程池,它可以给我们带来什么好处?要想合理使用线程池,我们需要对线程池的工作原理有深入的理解和认识,让我们一起来看看吧. 好处: ? 1.处理响应快,不用每次任务到达,都需要等待初

python执行系统命令后获取返回值

import os, subprocess # os.system('dir') #执行系统命令,没有获取返回值,windows下中文乱码 # result = os.popen('dir') #执行系统命令,返回值为result# res = result.read()# for line in res.splitlines():# print(line ) #用subprocess库获取返回值.# p = subprocess.Popen('dir', shell=True, stdout=

Java线程:新特征-有返回值的线程

http://lavasoft.blog.51cto.com/62575/222082/ 2009-11-04 17:33:56 标签:返回值 职场 线程 休闲 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://lavasoft.blog.51cto.com/62575/222082 Java线程:新特征-有返回值的线程 在Java5之前,线程是没有返回值的,常常为了“有”返回值,破费周折,而且代码很不好写.或者干脆绕过这道坎,

Java线程:新特征-有返回值的线程《转》

原始文章 在Java5之前,线程是没有返回值的,常常为了“有”返回值,破费周折,而且代码很不好写.或者干脆绕过这道坎,走别的路了. 现在Java终于有可返回值的任务(也可以叫做线程)了. 可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口. 执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了. 下面是个很简单的例子: import java.util.concurrent.*

捕获Java线程池执行任务抛出的异常

Java中线程执行的任务接口java.lang.Runnable 要求不抛出Checked异常, public interface Runnable { public abstract void run();} 那么如果 run() 方法中抛出了RuntimeException,将会怎么处理了? 通常java.lang.Thread对象运行设置一个默认的异常处理方法: java.lang.Thread.setDefaultUncaughtExceptionHandler(UncaughtExce

TestNG的参数化测试、共享线程池配置、参数默认值配置

在使用TestNG进行测试时,经常会使用到一些参数化配置,比如数据库.连接池.线程池数, 使用TestNG的参数@Parameter注解进行自动化读取 使用多线程的方式运行测试代码配置: 在'<suite>'标签中配置data-provider-thread-count="20" Java代码: /** * * <p> * Title: TestngParameters * </p> * * <p> * 参考配置文件testng-para

VB6 让程序结束后带有返回值

第三方命令行程序运行完之后,批处理中可以随时通过errorlevel变量收取运行结果.而VB写的控制台程序却没有提供这样的功能.关于让控制台程序返回值的教程是本博客独家放出. 返回值,其实也就是进程的结束码.由于VB限定了我们必须以Sub的方式来运行主程序,我们就只能强行中断进程并返回结束码. 这里需要三个API函数: GetCurrentProcessId:获取当前进程IDOpenProcess:获取进程句柄及信息TerminateProcess:终止进程,并指定返回值 这个是封装好的过程,调

【未解决】CImage::Save / Load 导致“线程 0xc224 已退出,返回值为 1 (0x1)”

不知道这个返回值意味着什么,反正只要用到Save/Load就会出现这个情况. 这个链接:http://forums.codeguru.com/showthread.php?354017-The-thread-Win32-Thread-(0x5a4)-has-exited-with-code-1-(0x1) 11楼: Usually it is but not necessarily. Sometimes exit code flags certain condition, not an erro

C# 线程池执行操作例子

public partial class Form1 : Form { CountdownEvent hander = new CountdownEvent(10); public static object lock_action = new object(); public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { for (int i = 0; i