zoukankan      html  css  js  c++  java
  • 如何接收线程池执行后的返回值

    时间紧迫,先简单记一下

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

    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}
  • 相关阅读:
    kafka与Rocketmq的区别
    CentOS7 安装特定版本的Docker brady
    Postgresql Error : must be superuser to alter superusers.
    php 用redis实现购物车底层代码
    查找文件夹中包含某字符的文件和行数
    utabs 下划线在微信端不出来
    PHP的生成器yield处理大量数据杠杠
    direction: rtl;
    强制html以https格式访问引入文件
    uviewui 引入 easycom 不用每个页面都引入
  • 原文地址:https://www.cnblogs.com/tranquillity/p/10531765.html
Copyright © 2011-2022 走看看