• 一个主线程下有多个子线程任务,主线程必须在100秒内将子线程执行的集合结果进行处理返回


    一个主线程下有多个子线程任务,主线程必须在100秒内将子线程执行的集合结果进行处理返回

    实现代码:

    package cmd.chengxuyuanzhilu.async;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Future;
    import java.util.concurrent.TimeUnit;
    
    /**
     * @author 微信公众号:程序员之路
     *
     */
    class Task implements Callable<String> {
        @Override
        public String call() throws Exception {
            System.out.println(String.format("子线程 %s: 在进行计算", Thread.currentThread().getName()));
            Thread.sleep(6000);
            int sum = 0;
            for (int i = 0; i < 100; i++)
                sum += i;
            return "子进程"+Thread.currentThread().getName()+":"+sum;
        }
    }
    
    /**
     * @author 微信公众号:程序员之路
     *
     */
    public class Test {
        public static void main(String[] args) {
            //个人建议,控制线程池中线程的个数,防止开启过多线程造成系统崩溃
            ExecutorService executor = Executors.newFixedThreadPool(5);
            
            //创建100个任务
            List<Task> tasks = new ArrayList<>();
            for (int i = 0; i < 100; i++) {
                Task task = new Task();
                tasks.add(task);
            }
            
            //ExecutorService的invokeAll方法执行任务集合中的所有任务,并设置超时时间(100秒)。超时后的任务将取消进行
            List<Future<String>> futures = new ArrayList<>();
            try {
                futures = executor.invokeAll(tasks, 100, TimeUnit.SECONDS);//注:执行所有的方法执行完的时间不能超过100秒,超时后的任务将取消执行
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            executor.shutdown();
            
            Integer i = 1;
            Integer j = 0;
            for (Future<String> future : futures) {
                try {
                    System.out.println(i+" : "+future.get());
                    i++;
                }catch (Exception e) {
                    j++;
                } 
            }
            System.out.println("未成功执行的任务个数:"+j);
        }
    }
  • 相关阅读:
    作业二 Git的安装与使用
    第一次作业
    字符串、文件操作,英文词频统计预处理
    了解大数据的特点、来源与数据呈现方式以及用Python写Mad Libs游戏
    第五次作业:结对项目-四则运算 “软件”之升级版
    第四次作业:个人项目-小学四则运算 “软件”之初版
    第3次作业:阅读《构建之法》1-5章
    分布式版本控制系统Git的安装与使用
    第一次作业-准备
    字符串操作,英文词频统计预处理
  • 原文地址:https://www.cnblogs.com/chengxuyuanzhilu/p/5796363.html
Copyright © 2020-2023  润新知