java 接口定义超时时间,超时抛出异常,并且任务继续触发



package com.cdp.ecosaas.portal.web.rest.fuDou;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.*;
import java.util.concurrent.*;

public class FutureTest{
    public static void main(String[] args) {
        Callable<List<Integer>> task = new Callable<List<Integer>>() {
            @Override
            public List<Integer> call() throws Exception {
                //执行时间需要1秒钟
                List<Integer> objects = new ArrayList<>();
                for (int i = 0; i < 10; i++) {
                    Thread.sleep(1000);
                    //超时1s钟
                    System.out.println("i = " + i);
                    objects.add(i);
                }
                return objects;
            }
        };

        ExecutorService executorService = Executors.newSingleThreadExecutor();
        try {
            Future<List<Integer>> future = executorService.submit(task);
            List<Integer> lisyt = future.get(2000 * 1, TimeUnit.MILLISECONDS); //任务处理超时时间设为 2 秒
            System.out.println("任务成功返回:" + lisyt.toString());
        } catch (TimeoutException ex) {
            System.out.println("处理超时啦....");
            ex.printStackTrace();
        } catch (Exception e) {
            System.out.println("处理失败.");
            e.printStackTrace();
        } finally {
            System.out.println("关闭线程池.");
            executorService.shutdown();
        }
    }

}



版权声明:本文为weixin_45320866原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。